-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimage_utils.py
109 lines (89 loc) · 2.56 KB
/
image_utils.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from PIL import Image
#this function from slides
def grayscale(img):
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
avg = sum(pixels[i,j]) // 3
pixels[i,j] = (avg,) * 3
return img
def righty(img):
pixels = img.load()
img2 = Image.new('RGB',(img.size[1], img.size[0]), (0,0,0))
pixels2 = img2.load()
for i in range(img2.size[0]):
for j in range(img2.size[1]):
pixels2[img2.size[0] - i - 1,j] = pixels[j,i]
return img2
#this function adapted from slides
def pixelate(img):
pixels = img.load()
width = img.size[0]
height = img.size[1]
#pixelsize is set to 10 just because the problem specs
#state that the squares should be 10x10 pixels large
#if you want to make it less blurry, decrement this variable
#conversely, if you want to make it more blurry, increment this variable
ps = 10
img2 = Image.new('RGB', (img.size[0],img.size[1]), (0,0,0))
pixels2 = img2.load()
for i in range(0,width - ps, ps):
for j in range(0,height-ps, ps):
for k in range(i, i + ps):
for l in range(j, j +ps):
pixels2[k,l] = pixels[i,j];
return img2
def kaleidoscope(img):
w = img.size[0]
h = img.size[1]
#lower left, lower right, upper left, and upper right respectively
ll = shrink(img)
lr = horizontal(ll)
ul = vertical(ll)
ur = vertical(lr)
llPixels = ll.load()
lrPixels = lr.load()
ulPixels = ul.load()
urPixels = ur.load()
img2 = Image.new('RGB', (w, h), (0,0,0))
pixels2 = img2.load()
for i in range(0, w// 2):
for j in range(0, h//2):
pixels2[i,j] = ulPixels[i,j]
for i in range(0, w// 2):
for j in range(h// 2, h):
pixels2[i, j] = llPixels[i, j - h // 2]
for i in range(w // 2, w - 1):
for j in range(h // 2, h):
pixels2[i,j] = lrPixels[i - w//2, j - h //2]
for i in range(w // 2, w-1):
for j in range(0, h//2):
pixels2[i,j] = urPixels[i - w//2, j]
return img2
#helper functions for kaleidoscope
def shrink(img):
pixels = img.load()
img2 = Image.new('RGB', (img.size[0] // 2 , img.size[1] // 2))
pixels2 = img2.load()
for j in range(img2.size[0]):
for i in range(img2.size[1]):
pixels2[j,i] = pixels[j*2, i*2]
return img2
def vertical(img):
pixels = img.load()
w,h = img.size
img2 = Image.new('RGB', (w,h), (0,0,0))
pixels2 = img2.load()
for x in range(w):
for y in range(h):
pixels2[x,y] = pixels[x , h - y - 1]
return img2
def horizontal(img):
pixels = img.load()
w,h = img.size
img2 = Image.new('RGB', (w,h), (0,0,0))
pixels2 = img2.load()
for x in range(w):
for y in range(h):
pixels2[x,y] = pixels[w - x -1, y]
return img2