from pathlib import Path from PIL import Image, ImageDraw from reportlab.pdfgen import canvas from reportlab.lib.utils import ImageReader root=Path('/Users/adolforeyna/brain/exports') slides=[] for i in range(1,13): p=root/f'emi_cinematic_slide_{i:02d}.png' image=Image.open(p).convert('RGB') if image.size==(1600,1000): image=image.crop((0,50,1600,950)) elif image.size!=(1600,900): raise ValueError(f'{p}: got {image.size}') image.save(p,optimize=True) slides.append((p,image)) pdf=root/'emi_latin_america_cinematic_slides.pdf' c=canvas.Canvas(str(pdf),pagesize=(1600,900),pageCompression=1) c.setTitle('EMI — A Vision for Latin America') c.setAuthor('EMI | Visual summary of Vision_for_Latin_America_final.docx') for _,image in slides: c.drawImage(ImageReader(image),0,0,width=1600,height=900) c.showPage() c.save() sheet=Image.new('RGB',(1500,1230),'#d7d8d2') d=ImageDraw.Draw(sheet) for i,(p,image) in enumerate(slides): thumb=image.resize((480,270)) x=15+(i%3)*495; y=15+(i//3)*300 sheet.paste(thumb,(x,y)) d.text((x+8,y+273),f'{i+1:02d} {p.stem}',fill='#172a25') sheet.save('/tmp/emi-cinematic-contact.png') print(f'PDF: {pdf} | 12 slides | {pdf.stat().st_size:,} bytes') print('Contact sheet: /tmp/emi-cinematic-contact.png')