Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_bruteforce_images.py
- import tkinter as tk
- from PIL import Image, ImageTk, ImageFilter
- WW, HH = 600, 600
- root = tk.Tk()
- canvas = tk.Canvas(root, width=WW, height=HH)
- root.geometry("%dx%d+10+10" % (WW, HH))
- canvas.pack()
- base = {
- (0, 0): (255, 255, 255), (0, 1): (255, 255, 0), (0, 2): (0, 255, 0),
- (1, 0): (255, 165, 0), (1, 1): (128, 128, 128), (1, 2): (0, 0, 255),
- (2, 0): (255, 0, 0), (2, 1): (128, 0, 128), (2, 2): (0, 0, 0)
- }
- def lerp(a, b, t):
- return a + (b - a) * t
- grid_colors = {}
- for i in range(7):
- for j in range(7):
- x = i * 2 / 6
- y = j * 2 / 6
- x0 = int(x)
- y0 = int(y)
- x1 = min(2, x0 + 1)
- y1 = min(2, y0 + 1)
- tx = x - x0
- ty = y - y0
- c00 = base[(x0, y0)]
- c10 = base[(x1, y0)]
- c01 = base[(x0, y1)]
- c11 = base[(x1, y1)]
- final = []
- for k in range(3):
- top = lerp(c00[k], c10[k], tx)
- bot = lerp(c01[k], c11[k], tx)
- val = lerp(top, bot, ty)
- final.append(int(val))
- grid_colors[(i, j)] = tuple(final)
- img = Image.new("RGB", (7, 7))
- for i in range(7):
- for j in range(7):
- img.putpixel((i, j), grid_colors[i, j])
- def draw_img(img, radius=67):
- img0 = img.resize((600, 600), Image.BILINEAR)
- img0 = img0.filter(ImageFilter.GaussianBlur(radius))
- photo = ImageTk.PhotoImage(img0)
- canvas.image = photo
- canvas.create_image(0, 0, anchor="nw", image=photo)
- canvas.update()
- def diagonal_gradient(W, H):
- diagonal_indices = []
- for s in range(W + H - 1):
- for r in range(H):
- c = s - r
- if 0 <= c < W:
- diagonal_indices.append((c, r))
- return diagonal_indices
- img = img.resize((100, 100), Image.BILINEAR)
- draw_img(img)
- pixel_list = list(img.getdata())
- gradient_cache = {}
- for i in range(len(pixel_list) - 1):
- current_rgb = pixel_list[i]
- next_rgb = pixel_list[i + 1]
- gradient_cache[current_rgb] = next_rgb
- gradient_cache[pixel_list[-1]] = pixel_list[0]
- last_color = pixel_list[-1]
- grid = list(diagonal_gradient(100, 100))
- count = 1
- while True:
- for x, y in grid[:count]:
- color = img.getpixel((x, y))
- img.putpixel((x, y), gradient_cache[color])
- draw_img(img, 5)
- count += 1
- if count >= len(grid):
- count = 1
Advertisement
Add Comment
Please, Sign In to add comment