Generando avatares de Github predeterminados

En este artículo te mostraré y te diré cómo puedes generar avatares como en Github.





Resultado de generación del apodo "test1"
Resultado de generación del apodo "test1"

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.





Cuantos cuadrados hay en el avatar
Cuantos cuadrados hay en el avatar

Cada avatar tiene bloques de 12 por 12.





Autark aleatorio de los espacios abiertos de Github
Estacionamiento automático aleatorio desde los espacios abiertos de 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()
      
      







Resultado

, - . , , , .





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.





test2
test2
test3
test3
test4
test4
test5
test5

Y finalmente, especialmente para Habr.





habr
habr
OVNI
OVNI

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.








All Articles