Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def dither(old):
- w, h = old.size
- raw = list(old.getdata())
- for y in range(h):
- for x in range(w):
- r, g, b = raw[x + y * w]
- diff = 255*3
- closest_color = (255,255,255)
- selected_object = ''
- for g_obj in palette.keys():
- rc, gc, bc = palette[g_obj]
- cdiff = abs(r - rc) + abs(g - gc) + abs(b - bc)
- if cdiff <= diff:
- diff = cdiff
- closest_color = (rc, gc, bc)
- rn, gn, bn = closest_color
- rq = r - rn
- gq = g - gn
- bq = b - bn
- raw[x + y * w] = (rn, gn, bn)
- for diffusion in matrix:
- offset_x, offset_y, err_diff = diffusion
- offset_x = x + offset_x
- offset_y = y + offset_y
- if offset_x + offset_y * w >= w*h or offset_x + offset_y * w < 0:
- continue
- offset_r, offset_g, offset_b = raw[offset_x + offset_y * w]
- offset_r += int(rq * err_diff)
- offset_g += int(gq * err_diff)
- offset_b += int(bq * err_diff)
- raw[offset_x + offset_y * w] = (limit_byte(offset_r), limit_byte(offset_g), limit_byte(offset_b))
- new_img = Image.new('RGB', (w, h))
- new_img.putdata(raw)
- return new_img
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement