mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 17:45:11 +02:00
78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
import os
|
|
from PIL import Image
|
|
import json
|
|
|
|
# Input files
|
|
icons = {
|
|
"light": "icon_gold_backfill_1024.png",
|
|
"dark": "dark.png",
|
|
"tinted": "tinted.png"
|
|
}
|
|
|
|
output_dir = "IconGold.appiconset"
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
# Sizes and scales required by iOS
|
|
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 for Contents.json, none for light
|
|
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)
|
|
# file name like: icon_20x20@2x_light.png
|
|
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
|
|
|
|
# Generate all images and JSON entries
|
|
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.")
|