Files
ponomar-pwa/scripts/generate-icons.py
T
2026-07-23 02:41:15 +03:00

46 lines
1.4 KiB
Python

#!/usr/bin/env python3
"""Generate PWA icons from OrthodoxCross.svg using rsvg-convert + Pillow."""
import os
import subprocess
import tempfile
from PIL import Image
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR = os.path.join(SCRIPT_DIR, '..')
SVG_PATH = os.path.join(PROJECT_DIR, 'static', 'OrthodoxCross.svg')
ICONS_DIR = os.path.join(PROJECT_DIR, 'static', 'icons')
os.makedirs(ICONS_DIR, exist_ok=True)
GOLD = (0xC5, 0xA5, 0x5A)
NAVY = (0x1A, 0x1A, 0x2E)
RENDER_SIZE = 2048
def generate_icon(size):
with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as tmp:
tmp_path = tmp.name
try:
subprocess.run([
'rsvg-convert',
'-w', str(RENDER_SIZE),
'-h', str(RENDER_SIZE),
SVG_PATH,
'-o', tmp_path,
], check=True)
img = Image.open(tmp_path).convert('RGBA')
result = Image.new('RGBA', (size, size), NAVY + (255,))
cross = img.resize((size, size), Image.LANCZOS)
gold_layer = Image.new('RGBA', (size, size), GOLD + (255,))
result.paste(gold_layer, mask=cross.split()[3])
return result
finally:
os.unlink(tmp_path)
for size in [192, 512]:
icon = generate_icon(size)
out = os.path.join(ICONS_DIR, f'icon-{size}.png')
icon.save(out, 'PNG')
print(f'Saved {out} ({size}x{size})')
print('Icons generated.')