From 19768edd43fe74f74ea15b939622660585c41d93 Mon Sep 17 00:00:00 2001 From: Jules Date: Tue, 7 Apr 2026 17:59:14 +0200 Subject: [PATCH] Strip pellicule noir + bandes verticales noires entre photos - Fond noir (pellicule) - Separateurs noirs entre les photos - Plus large (utilise toute la hauteur disponible) - Perforations grises sur bord noir Co-Authored-By: Claude Opus 4.6 (1M context) --- backend/collage.py | 51 ++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/backend/collage.py b/backend/collage.py index 09a5b06..2ef70f4 100644 --- a/backend/collage.py +++ b/backend/collage.py @@ -28,25 +28,26 @@ def _crop_center(img: Image.Image, ratio_cible: float) -> Image.Image: return img.crop((0, offset, img.width, offset + nouvelle_hauteur)) -def creer_strip(photos: list[Path], marge: int = 20, couleur_fond: str = "#ffffff") -> Path: +def creer_strip(photos: list[Path], marge: int = 10, couleur_fond: str = "#000000") -> Path: """Cree une bande portrait style pellicule (4 photos de gauche a droite). - La bande fait la moitie d'un 10x15 paysage (1800 x 570px environ). - Style pellicule : bords avec perforations. + Pellicule noire avec perforations, photos separees par des bandes noires. + Plus large : utilise toute la hauteur d'un 10x15 paysage divise en 2. """ nb = len(photos) images = [Image.open(p) for p in photos] # Dimensions de la bande : largeur d'un 10x15 paysage, hauteur = moitie bande_largeur = LARGEUR_10x15_L - bande_hauteur = (HAUTEUR_10x15_L - marge * 3) // 2 # 2 bandes par page + bande_hauteur = (HAUTEUR_10x15_L - marge) // 2 # Zone perforations pellicule (haut et bas) - perf_hauteur = 30 + perf_hauteur = 34 zone_photos_hauteur = bande_hauteur - perf_hauteur * 2 - # Taille de chaque photo dans la bande - espace_photos = bande_largeur - marge * (nb + 1) + # Taille de chaque photo dans la bande (separees par bandes noires) + sep = 12 # separateur noir entre photos + espace_photos = bande_largeur - marge * 2 - sep * (nb - 1) largeur_cellule = espace_photos // nb hauteur_cellule = zone_photos_hauteur ratio_cellule = largeur_cellule / hauteur_cellule @@ -58,41 +59,29 @@ def creer_strip(photos: list[Path], marge: int = 20, couleur_fond: str = "#fffff img_redim = img_crop.resize((largeur_cellule, hauteur_cellule), Image.LANCZOS) images_redim.append(img_redim) - # Creer la bande - strip = Image.new("RGB", (bande_largeur, bande_hauteur), couleur_fond) + # Creer la bande (fond noir = pellicule) + strip = Image.new("RGB", (bande_largeur, bande_hauteur), (20, 20, 20)) draw = ImageDraw.Draw(strip) - # Perforations pellicule (haut) - for px in range(marge, bande_largeur - marge, 40): + # Bords pellicule noirs (deja le fond) + # Perforations pellicule (haut) - trous blancs dans le bord noir + for px in range(marge + 10, bande_largeur - marge, 44): draw.rounded_rectangle( - [px, 6, px + 20, perf_hauteur - 6], - radius=4, fill=(30, 30, 30) + [px, 8, px + 22, perf_hauteur - 8], + radius=5, fill=(60, 60, 60) ) # Perforations pellicule (bas) - for px in range(marge, bande_largeur - marge, 40): + for px in range(marge + 10, bande_largeur - marge, 44): draw.rounded_rectangle( - [px, bande_hauteur - perf_hauteur + 6, px + 20, bande_hauteur - 6], - radius=4, fill=(30, 30, 30) + [px, bande_hauteur - perf_hauteur + 8, px + 22, bande_hauteur - 8], + radius=5, fill=(60, 60, 60) ) - # Bords pellicule - draw.rectangle([0, 0, bande_largeur - 1, perf_hauteur], fill=(40, 40, 40)) - draw.rectangle([0, bande_hauteur - perf_hauteur, bande_largeur - 1, bande_hauteur - 1], - fill=(40, 40, 40)) - - # Re-dessiner les perforations par-dessus les bords - for px in range(marge, bande_largeur - marge, 40): - draw.rounded_rectangle([px, 6, px + 20, perf_hauteur - 6], radius=4, fill=couleur_fond) - draw.rounded_rectangle( - [px, bande_hauteur - perf_hauteur + 6, px + 20, bande_hauteur - 6], - radius=4, fill=couleur_fond - ) - - # Coller les photos + # Coller les photos (separees par des bandes noires verticales) x = marge for img in images_redim: strip.paste(img, (x, perf_hauteur)) - x += largeur_cellule + marge + x += largeur_cellule + sep nom = f"strip_{photos[0].stem}.jpg" chemin = DOSSIER_EXPORTS / nom