| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- """Generate 10 color variants of the MixBoard icon for iOS alternate icons."""
- from PIL import Image, ImageEnhance
- import numpy as np
- import os
- SRC = "/Users/vdrobkov/Misc/Documents/Copilot/MixBoard/Assets.xcassets/AppIcon.appiconset/icon_1024.png"
- OUT_DIR = "/Users/vdrobkov/Misc/Documents/Copilot/Mixboard iOS/Sources/Resources/Assets.xcassets"
- # Load source icon
- src = Image.open(SRC).convert("RGBA")
- pixels = np.array(src, dtype=np.float32)
- # The green accent color in the original is approximately (80, 190, 60)
- # We'll shift the hue of green pixels to create variants
- # 10 colors across the spectrum
- COLORS = {
- "Green": (0.35, 0.85, 0.25), # original
- "Lime": (0.55, 0.95, 0.15),
- "Cyan": (0.15, 0.85, 0.85),
- "Blue": (0.25, 0.45, 0.95),
- "Purple": (0.6, 0.3, 0.9),
- "Pink": (0.95, 0.3, 0.6),
- "Red": (0.95, 0.25, 0.25),
- "Orange": (0.95, 0.55, 0.15),
- "Gold": (0.95, 0.8, 0.15),
- "White": (0.9, 0.9, 0.92),
- }
- def recolor_icon(src_pixels, target_rgb):
- """Replace green-ish pixels with the target color, keeping brightness."""
- result = src_pixels.copy()
- r, g, b, a = result[:,:,0], result[:,:,1], result[:,:,2], result[:,:,3]
-
- # Detect green-dominant pixels (the accent color)
- # Green channel is significantly higher than red and blue
- green_mask = (g > r * 1.2) & (g > b * 1.2) & (g > 80)
-
- # Also include bright green pixels
- bright_green = (g > 100) & (g > r) & (g > b)
- mask = green_mask | bright_green
-
- # Calculate brightness of original green pixels
- brightness = g[mask] / 255.0
-
- # Apply new color with same brightness
- tr, tg, tb = target_rgb
- result[:,:,0][mask] = np.clip(brightness * tr * 255, 0, 255)
- result[:,:,1][mask] = np.clip(brightness * tg * 255, 0, 255)
- result[:,:,2][mask] = np.clip(brightness * tb * 255, 0, 255)
-
- return result
- for name, color in COLORS.items():
- recolored = recolor_icon(pixels, color)
- img = Image.fromarray(recolored.astype(np.uint8), "RGBA")
-
- # Save as alternate icon
- icon_dir = os.path.join(OUT_DIR, f"AppIcon-{name}.appiconset")
- os.makedirs(icon_dir, exist_ok=True)
- img.save(os.path.join(icon_dir, "icon_1024.png"), "PNG")
-
- # Write Contents.json
- with open(os.path.join(icon_dir, "Contents.json"), "w") as f:
- f.write('''{
- "images" : [
- { "filename" : "icon_1024.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
- }''')
-
- print(f"Generated: {name} → {icon_dir}")
- print(f"\nDone! {len(COLORS)} icon variants generated.")
|