Advertisement
here2share

# tk_bruteforce_img_gen2.py ^ 12/24/24

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