"""Membuat aset logo dari gambar pemilik: PNG transparan (latar luar dihapus), favicon, OG."""
import numpy as np, cv2
from PIL import Image
src=Image.open('brand/logo-asli.jpg').convert('RGB')
a=np.asarray(src).astype(np.float32)
H,W,_=a.shape
lum=a.min(axis=2)
# area latar luar: flood fill dari tepi pada piksel hampir putih
near_white=(lum>232).astype(np.uint8)
mask=np.zeros((H+2,W+2),np.uint8)
ff=near_white.copy()
cv2.floodFill(ff,mask,(0,0),2)
outside=(ff==2)
# perluas area luar 2px untuk menangkap piksel antialias, lalu hitung alpha dari kanal merah
grow=cv2.dilate(outside.astype(np.uint8),np.ones((5,5),np.uint8))>0
navy=np.array([28,55,93],np.float32)
alpha=np.ones((H,W),np.float32)
edge=grow
r=a[:,:,0]
alpha_edge=np.clip((255-r)/(255-navy[0]),0,1)
alpha[edge]=alpha_edge[edge]
alpha[outside & (lum>245)]=0
rgb=a.copy()
rgb[edge]=navy  # warna tepi luar = navy, transparansi diatur alpha
rgba=np.dstack([rgb,alpha*255]).clip(0,255).astype(np.uint8)
img=Image.fromarray(rgba,'RGBA')
bbox=img.getbbox(); print('bbox',bbox)
pad=12
x0,y0,x1,y1=bbox
crop=img.crop((x0-pad,y0-pad,x1+pad,y1+pad))
crop.save('brand/kabarnikah-logo.png',optimize=True)
crop.save('brand/kabarnikah-logo.webp',quality=92,method=6)
print('logo',crop.size)
# kotak persegi untuk ikon
def square(im,size,bg=None,scale=0.86):
    s=max(im.size); canvas=Image.new('RGBA',(s,s),(0,0,0,0) if bg is None else bg)
    inner=im.copy(); inner.thumbnail((int(s*scale),int(s*scale)),Image.LANCZOS)
    canvas.paste(inner,((s-inner.width)//2,(s-inner.height)//2),inner)
    return canvas.resize((size,size),Image.LANCZOS)
for sz in (16,32,48,64,128,192,256,512):
    square(crop,sz,scale=0.94 if sz<=48 else 0.86).save(f'brand/favicon-{sz}.png',optimize=True)
square(crop,180,bg=(255,255,255,255),scale=0.78).convert('RGB').save('brand/apple-touch-icon.png',optimize=True)
# maskable icon (aman di zona 80%) latar ivory
square(crop,512,bg=(251,247,242,255),scale=0.66).save('brand/icon-maskable-512.png',optimize=True)
ico=[square(crop,s,scale=0.94) for s in (16,32,48)]
ico[0].save('brand/favicon.ico',sizes=[(16,16),(32,32),(48,48)],append_images=ico[1:])
# OG image 1200x630 ivory dengan logo
og=Image.new('RGBA',(1200,630),(251,247,242,255))
l=crop.copy(); l.thumbnail((420,420),Image.LANCZOS)
og.paste(l,((1200-l.width)//2,90),l)
og.convert('RGB').save('brand/og-base.png',optimize=True)
