Menghasilkan avatar Github default

Pada artikel ini saya akan menunjukkan dan memberi tahu Anda bagaimana Anda dapat menghasilkan avatar seperti di Github.





Hasil generasi untuk nama panggilan "test1"
Hasil generasi untuk julukan "test1"

Pertama, Anda perlu memahami cara kerja avatar Github. Sekilas, ini hanyalah kumpulan acak dari kotak berbayang (selanjutnya, blok) dengan urutan yang baik pada latar belakang abu-abu.





Berapa banyak kotak di avatar
Berapa banyak kotak di avatar

Setiap avatar memiliki 12 kali 12 blok.





Autark acak dari ruang terbuka Github
Autark acak dari ruang terbuka Github

, , , 6 12, , 12 12.





, , . python.









from PIL import ImageDraw, Image
import numpy as np
import hashlib
      
      







background_color = '#f2f1f2'
s = 'test1'
      
      



   . - , , .





bytes = hashlib.md5(s.encode('utf-8')).digest()
      
      



   





main_color = bytes[:3]
main_color = tuple(channel // 2 + 128 for channel in main_color) # rgb
      
      



   , . 6 12, , :





6 \ cdot 12 \ cdot 1 \ text {bit} = 72 \ text {bit} = 9 \ text {byte}
#   6  12
need_color = np.array([bit == '1' for byte in bytes[3:3+9for bit in bin(byte)[2:].zfill(8)]).reshape(612)

#   12  12     
need_color = np.concatenate((need_color, need_color[::-1]), axis=0)
      
      



    





img_size = (avatar_size, avatar_size)
block_size = avatar_size // 12 #  

img = Image.new('RGB', img_size, background_color)
draw = ImageDraw.Draw(img)

for x in range(avatar_size):
    for y in range(avatar_size):
        need_to_paint = need_color[x // block_size, y // block_size]
        if need_to_paint:
            draw.point((x, y), main_color)
      
      



,





img.show()
      
      







Hasil

, - . , , , .





Mari perbaiki ini dengan menambahkan perbatasan blok kosong.





for i in range(12):
    need_color[0, i] = 0
    need_color[11, i] = 0
    need_color[i, 0] = 0
    need_color[i, 11] = 0
      
      



Voila. Sekarang mari kita lihat avatar yang dihasilkan untuk nama panggilan lain.





tes2
tes2
tes3
tes3
test4
test4
tes5
tes5

Dan terakhir, khususnya bagi Habr.





habr
habr
benda terbang aneh
benda terbang aneh

Itu saja. Terima kasih kepada mereka yang telah selesai membaca, dan mereka yang ingin bereksperimen, saya kirimkan ke repositori saya dengan semua kodenya.








All Articles