diff --git a/backend/collage.py b/backend/collage.py
index e656893..3455fe0 100644
--- a/backend/collage.py
+++ b/backend/collage.py
@@ -31,27 +31,31 @@ def _crop_center(img: Image.Image, ratio_cible: float) -> Image.Image:
def creer_strip(photos: list[Path], marge: int = 10, couleur_fond: str = "#000000",
cadre: str | None = None) -> Path:
- """Cree une bande portrait style pellicule (4 photos de gauche a droite).
+ """Cree une bande portrait style pellicule (photos empilees de haut en bas).
- Pellicule noire avec perforations, photos separees par des bandes noires.
- Plus large : utilise toute la hauteur d'un 10x15 paysage divise en 2.
+ Pellicule noire avec perforations sur les cotes, photos separees par des
+ bandes noires. Taille fixe 600x1800px (5x15cm a 300dpi) : c'est le format
+ attendu par l'imprimante en mode "10x15-2up" (PageSize ...-div2), qui
+ duplique et decoupe automatiquement la bande en 2 exemplaires sur une
+ feuille 10x15. Doit rester strictement portrait (largeur < hauteur) et a
+ cette taille exacte pour eviter toute rotation/etirement a l'impression.
"""
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) // 2
+ # Dimensions de la bande : format fixe attendu par printer.py (FORMATS["10x15-2up"])
+ bande_largeur = 600
+ bande_hauteur = 1800
- # Zone perforations pellicule (haut et bas)
- perf_hauteur = 34
- zone_photos_hauteur = bande_hauteur - perf_hauteur * 2
+ # Zone perforations pellicule (gauche et droite)
+ perf_largeur = 34
+ zone_photos_largeur = bande_largeur - perf_largeur * 2
# 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
+ espace_photos = bande_hauteur - marge * 2 - sep * (nb - 1)
+ hauteur_cellule = espace_photos // nb
+ largeur_cellule = zone_photos_largeur
ratio_cellule = largeur_cellule / hauteur_cellule
# Recadrer et redimensionner
@@ -66,24 +70,24 @@ def creer_strip(photos: list[Path], marge: int = 10, couleur_fond: str = "#00000
draw = ImageDraw.Draw(strip)
# 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):
+ # Perforations pellicule (gauche) - trous blancs dans le bord noir
+ for py in range(marge + 10, bande_hauteur - marge, 44):
draw.rounded_rectangle(
- [px, 8, px + 22, perf_hauteur - 8],
+ [8, py, perf_largeur - 8, py + 22],
radius=5, fill=(60, 60, 60)
)
- # Perforations pellicule (bas)
- for px in range(marge + 10, bande_largeur - marge, 44):
+ # Perforations pellicule (droite)
+ for py in range(marge + 10, bande_hauteur - marge, 44):
draw.rounded_rectangle(
- [px, bande_hauteur - perf_hauteur + 8, px + 22, bande_hauteur - 8],
+ [bande_largeur - perf_largeur + 8, py, bande_largeur - 8, py + 22],
radius=5, fill=(60, 60, 60)
)
- # Coller les photos (separees par des bandes noires verticales)
- x = marge
+ # Coller les photos (separees par des bandes noires horizontales)
+ y = marge
for img in images_redim:
- strip.paste(img, (x, perf_hauteur))
- x += largeur_cellule + sep
+ strip.paste(img, (perf_largeur, y))
+ y += hauteur_cellule + sep
if cadre:
strip = appliquer_cadre_impression(strip, "strip", cadre)
diff --git a/frontend/index.html b/frontend/index.html
index bd5ba05..65bb2e7 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -739,7 +739,7 @@
-
+
diff --git a/frontend/js/camera.js b/frontend/js/camera.js
index ba1dfe1..2d67b1f 100644
--- a/frontend/js/camera.js
+++ b/frontend/js/camera.js
@@ -87,13 +87,12 @@ function getRatioCelluleAttendu() {
const nb = getNombrePhotos();
const mode = config.multi_shot?.mode || 'strip';
if (mode === 'strip') {
- // Reproduit creer_strip() dans backend/collage.py
- const bandeLargeur = 1800, bandeHauteurTotale = 1200, marge = 10, sep = 12, perfHauteur = 34;
- const bandeHauteur = Math.floor((bandeHauteurTotale - marge) / 2);
- const zonePhotosHauteur = bandeHauteur - perfHauteur * 2;
- const espacePhotos = bandeLargeur - marge * 2 - sep * (nb - 1);
- const largeurCellule = Math.floor(espacePhotos / nb);
- return largeurCellule / zonePhotosHauteur;
+ // Reproduit creer_strip() dans backend/collage.py (bande portrait 600x1800, photos empilees)
+ const bandeLargeur = 600, bandeHauteur = 1800, marge = 10, sep = 12, perfLargeur = 34;
+ const zonePhotosLargeur = bandeLargeur - perfLargeur * 2;
+ const espacePhotos = bandeHauteur - marge * 2 - sep * (nb - 1);
+ const hauteurCellule = Math.floor(espacePhotos / nb);
+ return zonePhotosLargeur / hauteurCellule;
} else {
// Reproduit creer_collage() dans backend/collage.py
const colonnes = 2;