← back to Beverlyhillsvideos

filmgen/app_icon.py

30 lines

#!/usr/bin/env python3
from PIL import Image, ImageDraw, ImageFont, ImageFilter
OUT="/Users/macstudio3/Projects/beverlyhillsvideos-app/assets"
CREAM=(246,243,236); INK=(21,19,16); GREEN=(31,61,48); GOLD=(184,147,90); MUTED=(150,143,130)
SERIF="/System/Library/Fonts/Supplemental/Didot.ttc"; SANS="filmgen/fonts/Jost.ttf"
def sf(s,i=0): return ImageFont.truetype(SERIF,s,index=i)
def jf(s): return ImageFont.truetype(SANS,s)
def ctr(d,cx,y,t,f,fill):
    w=d.textlength(t,font=f); d.text((cx-w/2,y),t,font=f,fill=fill); return w
def track(d,cx,y,t,f,fill,tr):
    ws=[d.textlength(c,font=f) for c in t]; tot=sum(ws)+tr*(len(t)-1); x=cx-tot/2
    for c,w in zip(t,ws): d.text((x,y),c,font=f,fill=fill); x+=w+tr
# ICON 1024 — NO transparency, NO rounded corners (Apple masks)
S=1024; img=Image.new("RGB",(S,S),GREEN); d=ImageDraw.Draw(img)
vig=Image.new("L",(S,S),0); ImageDraw.Draw(vig).ellipse([-S*0.3,-S*0.3,S*1.3,S*1.3],fill=70)
vig=vig.filter(ImageFilter.GaussianBlur(200)); img=Image.composite(img,Image.new("RGB",(S,S),(8,7,6)),vig); d=ImageDraw.Draw(img)
m=int(S*0.10); d.line([(S/2-70,S*0.30),(S/2+70,S*0.30)],fill=GOLD,width=3)
ctr(d,S/2,S*0.33,"BHV",sf(300),GOLD)
track(d,S/2,S*0.70,"BEVERLY HILLS VIDEOS",jf(30),CREAM,7)
img.save(f"{OUT}/icon.png")
# SPLASH 1284x2778 (portrait), ink ground, centered wordmark
W,H=1284,2778; sp=Image.new("RGB",(W,H),INK); ds=ImageDraw.Draw(sp)
track(ds,W/2,H*0.44,"THE INSIDER FILM GUIDE",jf(26),GOLD,10)
ctr(ds,W/2,H*0.47,"BEVERLY HILLS",sf(120),CREAM)
ctr(ds,W/2,H*0.47+130,"VIDEOS",sf(120),CREAM)
ds.line([(W/2-70,H*0.62),(W/2+70,H*0.62)],fill=GOLD,width=3)
sp.save(f"{OUT}/splash.png")
# adaptive/foreground square 1024 transparent-ish (use icon)
print("icon.png 1024, splash.png 1284x2778 ->", OUT)