Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.37 KB | None | 0 0
  1. def dither(old):
  2.     w, h = old.size
  3.     raw = list(old.getdata())
  4.     for y in range(h):
  5.         for x in range(w):
  6.             r, g, b = raw[x + y * w]
  7.             diff = 255*3
  8.             closest_color = (255,255,255)
  9.             selected_object = ''
  10.             for g_obj in palette.keys():
  11.                 rc, gc, bc = palette[g_obj]
  12.                 cdiff = abs(r - rc) + abs(g - gc) + abs(b - bc)
  13.                 if cdiff <= diff:
  14.                     diff = cdiff
  15.                     closest_color = (rc, gc, bc)
  16.             rn, gn, bn = closest_color
  17.             rq = r - rn
  18.             gq = g - gn
  19.             bq = b - bn
  20.             raw[x + y * w] = (rn, gn, bn)
  21.             for diffusion in matrix:
  22.                 offset_x, offset_y, err_diff = diffusion
  23.                 offset_x = x + offset_x
  24.                 offset_y = y + offset_y
  25.                 if offset_x + offset_y * w >= w*h or offset_x + offset_y * w < 0:
  26.                     continue
  27.                 offset_r, offset_g, offset_b = raw[offset_x + offset_y * w]
  28.                 offset_r += int(rq * err_diff)
  29.                 offset_g += int(gq * err_diff)
  30.                 offset_b += int(bq * err_diff)
  31.                 raw[offset_x + offset_y * w] = (limit_byte(offset_r), limit_byte(offset_g), limit_byte(offset_b))
  32.     new_img = Image.new('RGB', (w, h))
  33.     new_img.putdata(raw)
  34.     return new_img
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement