Generieren von Standard-Github-Avataren

In diesem Artikel werde ich Ihnen zeigen und erklären, wie Sie Avatare wie auf Github generieren können.





Generierungsergebnis für Spitznamen "test1"
Generierungsergebnis für Spitznamen "test1"

Zuerst müssen Sie verstehen, wie der Github-Avatar funktioniert. Auf den ersten Blick ist dies nur eine zufällige Sammlung von schattierten Quadraten (im Folgenden Blöcke) in einer guten Reihenfolge auf grauem Hintergrund.





Wie viele Quadrate enthält der Avatar?
Wie viele Quadrate enthält der Avatar?

Jeder Avatar hat 12 mal 12 Blöcke.





Zufälliges Autark aus den offenen Räumen von Github
Zufälliges Autark aus den offenen Räumen von 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()
      
      







Ergebnis

, - . , , , .





Beheben wir dies, indem wir einen Rand aus leeren Blöcken hinzufügen.





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. Schauen wir uns nun die generierten Avatare für andere Spitznamen an.





test2
test2
test3
test3
test4
test4
test5
test5

Und schließlich besonders für Habr.





habr
habr
UFO
UFO

Das ist alles. Dank derer, die mit dem Lesen fertig sind und experimentieren möchten, sende ich den gesamten Code an mein Repository .








All Articles