code-kumpel/scripts/make-store-assets.py
2026-10-31 07:03:22 +01:00

29 lines
1.7 KiB
Python

# Erzeugt Store-Grafiken + Landing-GIFs aus assets/sprites
from PIL import Image, ImageDraw
import os, glob
R = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
S = lambda *p: os.path.join(R, *p)
BG = (24, 20, 48)
stages = sorted(glob.glob(S('assets/sprites/stage-*')))
os.makedirs(S('store'), exist_ok=True); os.makedirs(S('landing/gifs'), exist_ok=True)
# Icon 128
Image.open(S('extension/icons/icon128.png')).convert('RGBA').resize((128,128), Image.NEAREST).save(S('store/icon-128.png'))
# Kachel 440x280
tile = Image.new('RGB', (440,280), BG); d = ImageDraw.Draw(tile)
for i in range(0,440,20): d.line([(i,0),(i,280)], fill=(36,30,70))
for i in range(0,280,20): d.line([(0,i),(440,i)], fill=(36,30,70))
spr = Image.open(sorted(glob.glob(stages[-1]+'/*.png'))[0]).convert('RGBA').resize((192,192), Image.NEAREST)
tile.paste(spr, (20,44), spr)
d.text((232,100), "CODE-KUMPEL", fill=(255,220,80)); d.text((232,124), "Dein Pixel-KI-Kumpel", fill=(200,200,255)); d.text((232,142), "Byte lernt mit dir", fill=(140,255,180))
tile = tile.resize((440,280)); tile.save(S('store/promo-tile-440x280.png'))
# GIFs pro Stufe (Frames = Stimmungen) + Evolution
evo = []
for st in stages:
fr = [Image.open(f).convert('RGBA') for f in sorted(glob.glob(st+'/*.png'))]
out = []
for f in fr:
b = Image.new('RGBA', (256,256), BG+(255,)); f2 = f.resize((256,256), Image.NEAREST); b.paste(f2,(0,0),f2); out.append(b.convert('P', palette=Image.ADAPTIVE))
out[0].save(S('landing/gifs', os.path.basename(st)+'.gif'), save_all=True, append_images=out[1:], duration=500, loop=0)
evo.append(out[0])
evo[0].save(S('landing/gifs/evolution.gif'), save_all=True, append_images=evo[1:], duration=800, loop=0)
print('ok', len(stages))