Skip to content

Commit 638b712

Browse files
authored
Pixel avatar in Python (#252)
Add Pixel avatar in Python
1 parent d723fe3 commit 638b712

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
"""
2+
Generate a pixel-art avatar you can use on different platforms.
3+
"""
4+
5+
from PIL import Image, ImageDraw
6+
import random
7+
8+
# symmetry is needed to generate tasty avatars
9+
symmetry = []
10+
avatar_color = (255, 255, 255)
11+
background_color = (0, 0, 0)
12+
13+
14+
def create_square(border, draw, color, element, size):
15+
if element == size // 2:
16+
draw.rectangle(border, color)
17+
elif len(symmetry) == element + 1:
18+
used_color = symmetry.pop()
19+
draw.rectangle(border, used_color)
20+
else:
21+
symmetry.append(color)
22+
draw.rectangle(border, color)
23+
24+
25+
def draw_avatar(border, draw, size):
26+
x0, y0, x1, y1 = border
27+
square_size = (x1 - x0) / size
28+
29+
colors = [avatar_color, background_color]
30+
31+
i = 1
32+
for y in range(0, size):
33+
i *= -1
34+
element = 0
35+
for x in range(0, size):
36+
top_left_x = x * square_size + x0
37+
top_left_y = y * square_size + y0
38+
bot_right_x = top_left_x + square_size
39+
bot_right_y = top_left_y + square_size
40+
create_square((top_left_x, top_left_y, bot_right_x, bot_right_y), draw, random.choice(colors), element, size)
41+
if element == size // 2 or element == 0:
42+
i *= -1
43+
element += i
44+
45+
46+
def generate_avatar(pixel_size=9, image_size=400, target_folder='.', avatar_name='PixelAvatar'):
47+
original_dimension = image_size
48+
49+
orig_image = Image.new('RGB', (original_dimension, original_dimension), color=background_color)
50+
draw = ImageDraw.Draw(orig_image)
51+
friend_size = original_dimension
52+
padding = friend_size / pixel_size
53+
54+
top_left_x = padding / 2
55+
top_left_y = padding / 2
56+
bot_right_x = top_left_x + friend_size - padding
57+
bot_right_y = top_left_y + friend_size - padding
58+
draw_avatar((top_left_x, top_left_y, bot_right_x, bot_right_y), draw, pixel_size)
59+
60+
orig_image.save("../{}/{}.png".format(target_folder, avatar_name))
61+
62+
63+
if __name__ == '__main__':
64+
generate_avatar()
1.41 KB
Loading

PythonAlgoVisualizer/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Pixel Avatar
2+
3+
This simple source code generates you a black-and-white pixel avatar. You have a lot of options to tweak: size, numbers of pixels used in each row, and colors used.
4+
5+
![an example avatar](PixelAvatar.png)

0 commit comments

Comments
 (0)