Advertisement
here2share

# tk_bruteforce_img_gen.py

Dec 11th, 2024 (edited)
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.99 KB | None | 0 0
  1. # tk_bruteforce_img_gen.py ... test demo
  2.  
  3. from PIL import Image, ImageTk
  4. import tkinter as tk
  5.  
  6. WW, HH = 640, 640
  7. WWo, HHo = WW // 16, HH // 16
  8.  
  9. o255 = [i for i in range(256)]
  10. o255 = o255[1:-1] + o255[::-1]
  11. L = len(o255)
  12.  
  13. root = tk.Tk()
  14. canvas = tk.Canvas(root, width=WW, height=HH)
  15. root.geometry("%dx%d+10+10" % (WW, HH))
  16. canvas.pack()
  17.  
  18. img = Image.new("RGB", (WWo, HHo))
  19. pixels = img.load()
  20.  
  21. grid_colors = {
  22.     (0, 0): (255, 255, 255),  # White
  23.     (0, 1): (255, 255, 0),    # Yellow
  24.     (0, 2): (0, 255, 0),      # Green
  25.     (1, 0): (255, 165, 0),    # Orange
  26.     (1, 1): (128, 128, 128),  # Gray (midpoint)
  27.     (1, 2): (0, 0, 255),      # Blue
  28.     (2, 0): (255, 0, 0),      # Red
  29.     (2, 1): (128, 0, 128),    # Purple
  30.     (2, 2): (0, 0, 0)         # Black
  31. }
  32.  
  33. def interpolate_color(color1, color2, factor):
  34.     return tuple(int(color1[i] + (color2[i] - color1[i]) * factor) for i in range(3))
  35.  
  36. k = 0
  37. i2xy = {}
  38. for j in range(HHo):
  39.     for i in range(WWo):
  40.         x = i / (WWo - 1) * 2
  41.         y = j / (HHo - 1) * 2
  42.         x0, y0 = int(x), int(y)
  43.         x1, y1 = min(x0 + 1, 2), min(y0 + 1, 2)
  44.         fx, fy = x - x0, y - y0
  45.  
  46.         color_top = interpolate_color(grid_colors[(x0, y0)], grid_colors[(x1, y0)], fx)
  47.         color_bottom = interpolate_color(grid_colors[(x0, y1)], grid_colors[(x1, y1)], fx)
  48.         color = interpolate_color(color_top, color_bottom, fy)
  49.  
  50.         pixels[i, j] = color
  51.         i2xy[k] = (i, j)
  52.         k += 1
  53.  
  54. def update_pixels(v):
  55.     return o255[v % L]
  56.  
  57. def next_highest_combo(perm, base=10):
  58.     size = len(perm)
  59.     max_num = max(perm)
  60.  
  61.     if perm == sorted(perm)[::-1]:
  62.         perm.reverse()
  63.         for i in range(len(perm) - 1, -1, -1):
  64.             if perm[i] < max_num:
  65.                 perm[i] += 1
  66.                 for j in range(i + 1, len(perm) - 1):
  67.                     perm[j] = perm[i]
  68.                 return perm
  69.                
  70.     i = size - 2
  71.     while i >= 0 and perm[i] >= perm[i + 1]:
  72.         i -= 1
  73.     if i == -1:
  74.         if max(perm) == base:
  75.             return [0, 0, 0]
  76.         return [0] * (size - 1) + [max(perm) + 1]
  77.  
  78.     j = size - 1
  79.     while perm[j] <= perm[i]:
  80.         j -= 1
  81.  
  82.     perm[i], perm[j] = perm[j], perm[i]
  83.     perm = perm[:i+1] + perm[i+1:][::-1]
  84.  
  85.     return perm
  86.  
  87. rgb_list = sum([list(pixels[i, j]) for j in range(HHo) for i in range(WWo)], [])
  88. img0 = img.resize((WW, HH), Image.ANTIALIAS)
  89. photo = ImageTk.PhotoImage(img0)
  90. canvas.create_image(0, 0, anchor=tk.NW, image=photo)
  91. canvas.update()
  92.  
  93. perm = [0] * (WWo * HHo * 3)
  94.  
  95. i = iii = len(perm) - 3
  96. while 1:
  97.     for i in range(iii):
  98.         part = perm[i:i+3]
  99.        
  100.         part = next_highest_combo(part, 6)
  101.         perm[i:i+3] = part
  102.        
  103.         r = perm[i] * 50
  104.         g = perm[i + 1] * 50
  105.         b = perm[i + 2] * 50
  106.         r0 = rgb_list[i]
  107.         g0 = rgb_list[i + 1]
  108.         b0 = rgb_list[i + 2]
  109.         color = (update_pixels(r0 + r), update_pixels(g0 + g), update_pixels(b0 + b))
  110.         pixels[i2xy[i // 3]] = color
  111.         # i = (i - 3) % iii
  112.  
  113.     frame = img.resize((WW, HH), Image.ANTIALIAS)
  114.  
  115.     photo.paste(frame)
  116.     canvas.update()
  117.  
  118. root.mainloop()
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement