-
Notifications
You must be signed in to change notification settings - Fork 0
/
image_to_pixel.py
39 lines (31 loc) · 1.41 KB
/
image_to_pixel.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from PIL import Image, ImageDraw
def pixelate_image(input_loc, image_name, image_type, output_loc, scale):
# open image and define dimensions
original = Image.open(input_loc + image_name + image_type, 'r')
w, h = original.size
w = int(w * scale)
h = int(h * scale)
size = 1 / scale
pix = original.load()
# create output image
new = Image.new(mode="RGB", size=(int(w * size), int(h * size)))
draw_new = ImageDraw.Draw(new)
# draw each pixel of the image
for j in range(h):
for i in range(w):
# store the RGB averages
color = [0, 0, 0]
# how large each pixel is
box_size = (int((j + 1) * size) - int(j * size)) * (int((i + 1) * size) - int(i * size))
# get the average color in the pixel
for y in range(int(j * size), int((j + 1) * size)):
for x in range(int(i * size), int((i + 1) * size)):
for code in range(3):
color[code] += pix[x, y][code]
for code in range(3):
color[code] = int(color[code] / box_size)
# draw the pixel
draw_new.rectangle(((int(i * size), int(j * size)), (int((i + 1) * size), int((j + 1) * size))),
fill=(color[0], color[1], color[2]))
# save the image
new.save(output_loc + image_name + '.png')