77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
|
|
import os
|
|
import numpy as np
|
|
from PIL import Image
|
|
|
|
# MAPPING
|
|
file_map = {
|
|
"uploaded_image_0_1768959247545.png": ("gumb_start.png", (300, 100)),
|
|
"uploaded_image_1_1768959247545.png": ("merilec_zdravja.png", (150, 150)),
|
|
"uploaded_image_2_1768959247545.png": ("okvir_zarjavel.png", (800, 250)),
|
|
"uploaded_image_3_1768959247545.jpg": ("amnezija_maska.png", (1920, 1080))
|
|
}
|
|
|
|
upload_dir = "/Users/davidkotnik/.gemini/antigravity/brain/998d0b10-1733-4e5b-85ed-249b986ba9b3"
|
|
dest_dir = "/Users/davidkotnik/repos/novafarma/assets/slike/NOVE_SLIKE/UI"
|
|
|
|
if not os.path.exists(dest_dir):
|
|
os.makedirs(dest_dir)
|
|
|
|
def clean_checkerboard(img):
|
|
# Ensure RGBA
|
|
img = img.convert("RGBA")
|
|
data = np.array(img)
|
|
|
|
r, g, b = data[:,:,0], data[:,:,1], data[:,:,2]
|
|
|
|
# 1. White Squares (Approx 240-255)
|
|
mask_white = (r > 220) & (g > 220) & (b > 220)
|
|
|
|
# 2. Grey Squares (Approx 190-210 usually)
|
|
# Be careful not to kill the Rusty Frame's grey metal if it matches exactly.
|
|
# But usually checkerboard is very neutral grey (R=G=B).
|
|
# We enforce strict neutrality R=G=B tolerance.
|
|
|
|
is_neutral = (np.abs(r.astype(int) - g.astype(int)) < 15) & \
|
|
(np.abs(r.astype(int) - b.astype(int)) < 15)
|
|
|
|
is_grey_range = (r > 150) & (r < 220)
|
|
|
|
mask_grey = is_grey_range & is_neutral
|
|
|
|
# Combine
|
|
mask_to_remove = mask_white | mask_grey
|
|
|
|
# Apply
|
|
data[mask_to_remove, 3] = 0
|
|
|
|
return Image.fromarray(data)
|
|
|
|
def process_single(upload_name, target_name, size):
|
|
src = os.path.join(upload_dir, upload_name)
|
|
dst = os.path.join(dest_dir, target_name)
|
|
|
|
if not os.path.exists(src):
|
|
print(f"Skipping missing source: {src}")
|
|
return
|
|
|
|
try:
|
|
img = Image.open(src)
|
|
|
|
# Clean
|
|
cleaned = clean_checkerboard(img)
|
|
|
|
# Resize
|
|
resized = cleaned.resize(size, Image.Resampling.LANCZOS)
|
|
|
|
# Save
|
|
resized.save(dst)
|
|
print(f"Fixed & Saved: {dst}")
|
|
|
|
except Exception as e:
|
|
print(f"Error on {target_name}: {e}")
|
|
|
|
# Run
|
|
for u_name, (t_name, size) in file_map.items():
|
|
process_single(u_name, t_name, size)
|