license
[imago.git] / quantize.py
1 from PIL import Image, ImageFilter
2 import src.im_debug as imd
3
4 rr , gg, bb = 0, 0, 0
5 s = 0
6
7 def color_quant(image):
8     # TODO comment
9     image_l = image.load()
10     new_image = Image.new('RGB', image.size)
11     new_image_l = new_image.load()
12
13     def nearest((r, g, b)):
14         global rr, gg, bb, s
15         o = ((r - 166) ** 2 + (g - 166) ** 2 + (b - 166) ** 2, (166, 166, 166))
16         bl = (r * r + g * g + b * b, (0, 0, 0))
17         r, g, b = r - 255, g - 255, b - 255
18         w = (r * r + g * g + b * b, (255, 255, 255))
19         if min([o, bl, w]) == o:
20             rr += r + 255
21             gg += g + 255
22             bb += b + 255
23             s += 1
24         return min([o, bl, w])[1]
25
26     new_image = Image.new('RGB', image.size)
27     new_image_l = new_image.load()
28     for x in xrange(image.size[0]):
29         for y in xrange(image.size[1]):
30             new_image_l[x, y] = nearest(image_l[x, y])
31
32     print rr / s, gg /s, bb /s
33
34     return new_image
35
36 im = Image.open('image.jpg')
37 imd.show(color_quant(im))
38
39