doom
This commit is contained in:
81
remove_checkerboard.py
Normal file
81
remove_checkerboard.py
Normal file
@@ -0,0 +1,81 @@
|
||||
|
||||
import os
|
||||
from PIL import Image, ImageDraw
|
||||
|
||||
def process_image(file_path, mode="flood_corners"):
|
||||
try:
|
||||
img = Image.open(file_path).convert("RGBA")
|
||||
width, height = img.size
|
||||
pixels = img.load()
|
||||
|
||||
# Define checkerboard colors to target
|
||||
# Typically White and Gray.
|
||||
# We'll treat anything very light/grey as background if it's connected to start point.
|
||||
# Gray is often (204, 204, 204) or (192, 192, 192)
|
||||
|
||||
def is_checkerboard(p):
|
||||
r, g, b, a = p
|
||||
# Check for white-ish
|
||||
if r > 240 and g > 240 and b > 240: return True
|
||||
# Check for neutral grey-ish
|
||||
if abs(r - g) < 10 and abs(r - b) < 10 and 150 < r < 230: return True
|
||||
return False
|
||||
|
||||
# Flood fill algorithm
|
||||
visited = set()
|
||||
queue = []
|
||||
|
||||
if mode == "flood_corners":
|
||||
# Start from all 4 corners
|
||||
starts = [(0, 0), (width-1, 0), (0, height-1), (width-1, height-1)]
|
||||
for s in starts:
|
||||
if is_checkerboard(pixels[s]):
|
||||
queue.append(s)
|
||||
visited.add(s)
|
||||
|
||||
elif mode == "flood_center":
|
||||
# For the mask, we want to clear the center
|
||||
center = (width // 2, height // 2)
|
||||
if is_checkerboard(pixels[center]):
|
||||
queue.append(center)
|
||||
visited.add(center)
|
||||
|
||||
# Processing queue
|
||||
while queue:
|
||||
x, y = queue.pop(0)
|
||||
pixels[x, y] = (0, 0, 0, 0) # Make transparent
|
||||
|
||||
# Check neighbors
|
||||
for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
|
||||
nx, ny = x + dx, y + dy
|
||||
if 0 <= nx < width and 0 <= ny < height:
|
||||
if (nx, ny) not in visited:
|
||||
if is_checkerboard(pixels[nx, ny]):
|
||||
visited.add((nx, ny))
|
||||
queue.append((nx, ny))
|
||||
|
||||
img.save(file_path)
|
||||
print(f"Processed: {file_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error processing {file_path}: {e}")
|
||||
|
||||
# Paths
|
||||
ui_dir = "/Users/davidkotnik/repos/novafarma/assets/slike/NOVE_SLIKE/UI"
|
||||
|
||||
# 1. Solid Objects (Frame, Meter, Button) - Flood from corners
|
||||
solid_objects = [
|
||||
"okvir_zarjavel.png",
|
||||
"merilec_zdravja.png",
|
||||
"gumb_start.png"
|
||||
]
|
||||
|
||||
for f in solid_objects:
|
||||
path = os.path.join(ui_dir, f)
|
||||
if os.path.exists(path):
|
||||
process_image(path, mode="flood_corners")
|
||||
|
||||
# 2. Mask (Vignette) - Flood from center (remove the middle checkerboard)
|
||||
mask_path = os.path.join(ui_dir, "amnezija_maska.png")
|
||||
if os.path.exists(mask_path):
|
||||
process_image(mask_path, mode="flood_center")
|
||||
Reference in New Issue
Block a user