from pathlib import Path
from zipfile import ZipFile
from lxml import etree as E
from PIL import Image,ImageDraw
import posixpath,io,json
ROOT=Path(__file__).resolve().parents[1]
SRC=Path('/Users/jack/Library/Containers/com.tencent.WeWorkMac/Data/Documents/Profiles/A74DF84611CC2ED79C4C206E40B5D80E/Caches/Files/2026-08/7AAFD92ADB1A293B4884178A4F5C5A5D/康比特【AI智慧营养超级食堂】解决方案_2608.pptx')
rows=[]
with ZipFile(SRC) as z:
 for n in [19,20,21,22,23,24,25,26,27,28,29,30,39]:
  rels=E.fromstring(z.read(f'ppt/slides/_rels/slide{n}.xml.rels'))
  for r in rels:
   if not r.get('Type','').endswith('/image'):continue
   target=posixpath.normpath(posixpath.join('ppt/slides',r.get('Target')))
   try:raw=z.read(target);im=Image.open(io.BytesIO(raw))
   except:continue
   if im.width<100 or im.height<80:continue
   out=ROOT/'assets'/f'aug-s{n:02d}-{r.get("Id")}{Path(target).suffix}';out.write_bytes(raw)
   rows.append({'page':n,'rid':r.get('Id'),'member':target,'path':str(out.relative_to(ROOT)),'width':im.width,'height':im.height})
(ROOT/'august-assets.json').write_text(json.dumps(rows,ensure_ascii=False,indent=2))
for k in range(0,len(rows),24):
 sheet=Image.new('RGB',(1500,1000),'#eee');draw=ImageDraw.Draw(sheet)
 for j,r in enumerate(rows[k:k+24]):
  im=Image.open(ROOT/r['path']).convert('RGBA');bg=Image.new('RGBA',im.size,'white');bg.alpha_composite(im);im=bg.convert('RGB');im.thumbnail((240,220));x=(j%6)*250;y=(j//6)*250;sheet.paste(im,(x+(250-im.width)//2,y+25));draw.text((x+4,y+6),f"{r['page']} {r['rid']} {r['width']}x{r['height']}",fill='black')
 sheet.save(ROOT/'preview'/f'aug-assets-{k//24+1}.jpg')
print('extracted',len(rows),'images')
