Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_bruteforce_img_gen2.py ... test demo
- from PIL import Image, ImageTk
- import tkinter as tk
- WW, HH = 640, 640
- sq = 64
- WWo, HHo = sq, sq
- o255 = [i for i in range(256)]
- o255 = o255[1:-1] + o255[::-1]
- L = len(o255)
- root = tk.Tk()
- canvas = tk.Canvas(root, width=WW, height=HH)
- root.geometry("%dx%d+10+10" % (WW, HH))
- canvas.pack()
- img = Image.new("RGB", (WWo, HHo))
- pixels = img.load()
- grid_colors = {
- (0, 0): (255, 255, 255), # White
- (0, 1): (255, 255, 0), # Yellow
- (0, 2): (0, 255, 0), # Green
- (1, 0): (255, 165, 0), # Orange
- (1, 1): (128, 128, 128), # Gray (midpoint)
- (1, 2): (0, 0, 255), # Blue
- (2, 0): (255, 0, 0), # Red
- (2, 1): (128, 0, 128), # Purple
- (2, 2): (0, 0, 0) # Black
- }
- def interpolate_color(color1, color2, factor):
- return tuple(int(color1[i] + (color2[i] - color1[i]) * factor) for i in range(3))
- k = 0
- i2xy = {}
- for j in range(HHo):
- for i in range(WWo):
- x = i / (WWo - 1) * 2
- y = j / (HHo - 1) * 2
- x0, y0 = int(x), int(y)
- x1, y1 = min(x0 + 1, 2), min(y0 + 1, 2)
- fx, fy = x - x0, y - y0
- color_top = interpolate_color(grid_colors[(x0, y0)], grid_colors[(x1, y0)], fx)
- color_bottom = interpolate_color(grid_colors[(x0, y1)], grid_colors[(x1, y1)], fx)
- color = interpolate_color(color_top, color_bottom, fy)
- pixels[i, j] = color
- i2xy[k] = (i, j)
- k += 1
- def update_pixels(v):
- return o255[v%L]
- def next_highest_combo(perm, base=10):
- size = len(perm)
- max_num = max(perm)
- if perm == sorted(perm)[::-1]:
- perm.reverse()
- for i in range(len(perm) - 1, -1, -1):
- if perm[i] < max_num:
- perm[i] += 1
- for j in range(i + 1, len(perm) - 1):
- perm[j] = perm[i]
- return perm
- i = size - 2
- while i >= 0 and perm[i] >= perm[i + 1]:
- i -= 1
- if i == -1:
- if max(perm) == base:
- return [0, 0, 0]
- return [0] * (size - 1) + [max(perm) + 1]
- j = size - 1
- while perm[j] <= perm[i]:
- j -= 1
- perm[i], perm[j] = perm[j], perm[i]
- perm = perm[:i+1] + perm[i+1:][::-1]
- return perm
- rgb_list = sum([list(pixels[i, j]) for j in range(HHo) for i in range(WWo)], [])
- img0 = img.resize((WW, HH), Image.ANTIALIAS)
- photo = ImageTk.PhotoImage(img0)
- canvas.create_image(0, 0, anchor=tk.NW, image=photo)
- canvas.update()
- perm = [0] * (WWo * HHo * 3)
- i = iii = len(perm) - 3
- while 1:
- for i in range(0, iii + 1, 3):
- part = perm[i:i+3]
- part = next_highest_combo(part, 128)
- perm[i:i+3] = part
- r = perm[i] * 5
- g = perm[i + 1] * 5
- b = perm[i + 2] * 5
- r0 = rgb_list[i]
- g0 = rgb_list[i + 1]
- b0 = rgb_list[i + 2]
- color = (update_pixels(r0 + r), update_pixels(g0 + g), update_pixels(b0 + b))
- pixels[i2xy[i // 3]] = color
- # i = (i - 3) % iii
- frame = img.resize((WW, HH), Image.ANTIALIAS)
- photo.paste(frame)
- canvas.update()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement