Dans cet article, je vais vous montrer et vous dire comment générer des avatars comme sur Github.
Vous devez d'abord comprendre comment fonctionne l'avatar Github. À première vue, il ne s'agit que d'une collection aléatoire de carrés ombrés (ci-après, blocs) dans un bon ordre sur un fond gris.
Chaque avatar a 12 par 12 blocs.
, , , 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()
, - . , , , .
Corrigeons cela en ajoutant une bordure de blocs vides.
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. Jetons maintenant un œil aux avatars générés pour les autres surnoms.
Et enfin, surtout pour Habr.
C'est tout. Merci à ceux qui ont fini de lire, et à ceux qui veulent expérimenter, j'envoie à mon référentiel avec tout le code.