import glob import os from PIL import Image # Original colors mapped to LPC approximate equivalents color_map = { (0, 128, 0): (92, 154, 42), # Dark Green (0, 255, 0): (124, 184, 47), # Bright Green (128, 128, 128): (173, 132, 79), # Grey -> Brown dirt (192, 192, 192): (248, 188, 118), # Light Grey -> Light dirt/sand (0, 0, 0): (107, 60, 46), # Black -> Dark brown (for softer LPC look) (255, 255, 0): (224, 156, 76), # Yellow -> LPC Yellow/Orange (255, 255, 255): (244, 215, 160), # White -> LPC Light bone/sand (0, 255, 255): (164, 221, 219), # Cyan (255, 0, 255): (210, 100, 150), # Magenta -> Pink (255, 0, 0): (180, 50, 50), # Red } def recolor_pixel(px): # px is (r, g, b) or (r, g, b, a) rgb = px[:3] if rgb in color_map: new_rgb = color_map[rgb] if len(px) == 4: return new_rgb + (px[3],) return new_rgb # If not exact match, find closest by euclidean distance closest = min(color_map.keys(), key=lambda c: sum((a-b)**2 for a, b in zip(rgb, c))) new_rgb = color_map[closest] if len(px) == 4: return new_rgb + (px[3],) return new_rgb input_files = glob.glob('/home/enne2/dev/mice/assets/Rat/*BMP_1*.png') out_dir = '/home/enne2/dev/mice/assets/Rat_LPC_Style/' for f in input_files: img = Image.open(f).convert('RGBA') new_data = [recolor_pixel(p) for p in img.getdata()] img.putdata(new_data) basename = os.path.basename(f) img.save(os.path.join(out_dir, basename)) print(f"Recolored {basename}")