import os
from PIL import Image
import json
icons = {
"light": "icon_gold_backfill_1024.png",
"dark": "dark.png",
"tinted": "tinted.png"
}
output_dir = "IconGold.appiconset"
os.makedirs(output_dir, exist_ok=True)
icon_sizes = [
(20, [1, 2, 3]),
(29, [1, 2, 3]),
(40, [1, 2, 3]),
(60, [2, 3]),
(76, [1, 2]),
(83.5, [2]),
(1024, [1]),
]
appearance_tags = {
"light": None,
"dark": [{"appearance": "luminosity", "value": "dark"}],
"tinted": [{"appearance": "luminosity", "value": "tinted"}]
}
def save_icon(image, size_pt, scale, appearance):
px = int(size_pt * scale)
suffix = appearance
filename = f"icon_{int(size_pt)}x{int(size_pt)}@{scale}x_{suffix}.png"
filepath = os.path.join(output_dir, filename)
resized = image.resize((px, px), Image.LANCZOS)
resized.save(filepath)
return filename
def generate_images_for_appearance(img_path, appearance):
image = Image.open(img_path)
images = []
for size, scales in icon_sizes:
for scale in scales:
filename = save_icon(image, size, scale, appearance)
entry = {
"idiom": "universal",
"size": f"{size}x{size}",
"scale": f"{scale}x",
"filename": filename,
"platform": "ios",
}
if appearance_tags[appearance]:
entry["appearances"] = appearance_tags[appearance]
images.append(entry)
return images
all_images = []
for appearance, filepath in icons.items():
all_images.extend(generate_images_for_appearance(filepath, appearance))
contents = {
"images": all_images,
"info": {
"version": 1,
"author": "xcode"
}
}
with open(os.path.join(output_dir, "Contents.json"), "w") as f:
json.dump(contents, f, indent=4)
print("✅ IconGold asset catalog with light, dark and tinted appearances generated.")