Fix impression strip : ne pas pivoter/rotation_180 les pellicules
Le strip est généré en portrait 600x1800 par design. L'orientation "paysage" configurée pour 10x15 le faisait pivoter, et rotation_180 l'inversait. Résultat : bandes imprimées à l'envers avec une seule photo visible par bande après coupe. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -79,7 +79,8 @@ def _crop_to(img, largeur: int, hauteur: int):
|
|||||||
|
|
||||||
def _preparer_image(chemin: Path, largeur: int, hauteur: int,
|
def _preparer_image(chemin: Path, largeur: int, hauteur: int,
|
||||||
format_papier: str | None = None, cadre: str | None = None,
|
format_papier: str | None = None, cadre: str | None = None,
|
||||||
orientation: str = "paysage", event_id: str | None = None) -> Path:
|
orientation: str = "paysage", event_id: str | None = None,
|
||||||
|
skip_rotate: bool = False) -> Path:
|
||||||
"""
|
"""
|
||||||
Pivote si nécessaire, recadre aux dimensions exactes (cover crop),
|
Pivote si nécessaire, recadre aux dimensions exactes (cover crop),
|
||||||
applique le cadre, compense les marges de coupe, sauvegarde en temp.
|
applique le cadre, compense les marges de coupe, sauvegarde en temp.
|
||||||
@@ -93,6 +94,7 @@ def _preparer_image(chemin: Path, largeur: int, hauteur: int,
|
|||||||
img = Image.open(chemin).convert("RGB")
|
img = Image.open(chemin).convert("RGB")
|
||||||
img = ImageOps.exif_transpose(img)
|
img = ImageOps.exif_transpose(img)
|
||||||
|
|
||||||
|
if not skip_rotate:
|
||||||
if orientation == "portrait" and img.width > img.height:
|
if orientation == "portrait" and img.width > img.height:
|
||||||
img = img.rotate(90, expand=True)
|
img = img.rotate(90, expand=True)
|
||||||
elif orientation == "paysage" and img.height > img.width:
|
elif orientation == "paysage" and img.height > img.width:
|
||||||
@@ -106,7 +108,7 @@ def _preparer_image(chemin: Path, largeur: int, hauteur: int,
|
|||||||
img = _appliquer_offsets_coupe(img)
|
img = _appliquer_offsets_coupe(img)
|
||||||
|
|
||||||
config_imp = charger_config().get("impression", {})
|
config_imp = charger_config().get("impression", {})
|
||||||
if config_imp.get("rotation_180", False):
|
if config_imp.get("rotation_180", False) and not skip_rotate:
|
||||||
img = img.rotate(180)
|
img = img.rotate(180)
|
||||||
|
|
||||||
tmp = tempfile.NamedTemporaryFile(suffix=".jpg", delete=False)
|
tmp = tempfile.NamedTemporaryFile(suffix=".jpg", delete=False)
|
||||||
@@ -260,7 +262,7 @@ def imprimer(
|
|||||||
fmt_base = format_papier.replace("-2up", "")
|
fmt_base = format_papier.replace("-2up", "")
|
||||||
is_strip = "-2up" in format_papier
|
is_strip = "-2up" in format_papier
|
||||||
cadre = cadre_override if cadre_override is not None else (None if is_strip else conf_imp.get("cadres_actifs", {}).get(fmt_base))
|
cadre = cadre_override if cadre_override is not None else (None if is_strip else conf_imp.get("cadres_actifs", {}).get(fmt_base))
|
||||||
orientation = conf_imp.get("orientations", {}).get(fmt_base, "portrait")
|
orientation = "portrait" if is_strip else conf_imp.get("orientations", {}).get(fmt_base, "portrait")
|
||||||
|
|
||||||
if orientation == "paysage" and hauteur > largeur:
|
if orientation == "paysage" and hauteur > largeur:
|
||||||
largeur, hauteur = hauteur, largeur
|
largeur, hauteur = hauteur, largeur
|
||||||
@@ -278,7 +280,7 @@ def imprimer(
|
|||||||
log.error(f"Fichier introuvable : {chemin_photo}")
|
log.error(f"Fichier introuvable : {chemin_photo}")
|
||||||
return {"succes": False, "erreur": ERREUR_FICHIER, "message": "Fichier photo introuvable"}
|
return {"succes": False, "erreur": ERREUR_FICHIER, "message": "Fichier photo introuvable"}
|
||||||
|
|
||||||
chemin_print = _preparer_image(chemin_photo, largeur, hauteur, fmt_base, cadre, orientation, event_id=event_id)
|
chemin_print = _preparer_image(chemin_photo, largeur, hauteur, fmt_base, cadre, orientation, event_id=event_id, skip_rotate=is_strip)
|
||||||
tmp_a_supprimer = [chemin_print] if chemin_print != chemin_photo else []
|
tmp_a_supprimer = [chemin_print] if chemin_print != chemin_photo else []
|
||||||
|
|
||||||
px_page = fmt.get("px_page")
|
px_page = fmt.get("px_page")
|
||||||
|
|||||||
Reference in New Issue
Block a user