Pada artikel ini saya akan menunjukkan dan memberi tahu Anda bagaimana Anda dapat menghasilkan avatar seperti di Github.
Pertama, Anda perlu memahami cara kerja avatar Github. Sekilas, ini hanyalah kumpulan acak dari kotak berbayang (selanjutnya, blok) dengan urutan yang baik pada latar belakang abu-abu.
Setiap avatar memiliki 12 kali 12 blok.
, , , 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()
, - . , , , .
Mari perbaiki ini dengan menambahkan perbatasan blok kosong.
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. Sekarang mari kita lihat avatar yang dihasilkan untuk nama panggilan lain.
Dan terakhir, khususnya bagi Habr.
Itu saja. Terima kasih kepada mereka yang telah selesai membaca, dan mereka yang ingin bereksperimen, saya kirimkan ke repositori saya dengan semua kodenya.