En este artículo te mostraré y te diré cómo puedes generar avatares como en Github.
Primero necesitas entender cómo funciona el avatar de Github. A primera vista, esta es solo una colección aleatoria de cuadrados sombreados (en adelante, bloques) en buen orden sobre un fondo gris.
Cada avatar tiene bloques de 12 por 12.
, , , 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()
, - . , , , .
Arreglemos esto agregando un borde de bloques vacíos.
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. Echemos ahora un vistazo a los avatares generados para otros apodos.
Y finalmente, especialmente para Habr.
Eso es todo. Gracias a los que han terminado de leer, y a los que quieren experimentar, los envío a mi repositorio con todo el código.