In diesem Artikel werde ich Ihnen zeigen und erklären, wie Sie Avatare wie auf Github generieren können.
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.
Jeder Avatar hat 12 mal 12 Blöcke.
, , , 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 12
need_color = np.array([bit == '1' for byte in bytes[3:3+9] for bit in bin(byte)[2:].zfill(8)]).reshape(6, 12)
# 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()
, - . , , , .
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.
Und schließlich besonders für Habr.
Das ist alles. Dank derer, die mit dem Lesen fertig sind und experimentieren möchten, sende ich den gesamten Code an mein Repository .