Changes to be committed:
modified: Opencode/scripts/script_print.sh modified: photobooth-app/script/script_print.sh
This commit is contained in:
@@ -15,20 +15,15 @@
|
||||
#
|
||||
# ── CALIBRAGE IMPRESSION ─────────────────────────────────────────────────────
|
||||
#
|
||||
# Selphy CP1300 — papier Postcard 150x100mm (ratio exact 3:2)
|
||||
# Image traitée par photobooth-app : 2000x1333 (ratio 3:2)
|
||||
# Résolution cible à 300 dpi : 1772x1181 px
|
||||
#
|
||||
# TEST_MODE contrôle la méthode de préparation :
|
||||
# A — resize 1772x1181 + media=Postcard + fit-to-page (pas de raw)
|
||||
# → marges blanches possibles si le driver ajoute des marges
|
||||
# B — resize 1860x1240 (overscan 5%) + media=Postcard.Fullbleed + print-scaling=fill
|
||||
# → image légèrement agrandie puis rognée par la Selphy pour remplir le papier
|
||||
#
|
||||
# Après validation, laisser la valeur qui donne le meilleur résultat.
|
||||
# Selphy CP1300 — papier Postcard borderless 100x148mm
|
||||
# Image traitée par photobooth-app : 2000x1333
|
||||
# Overscan : 2114x1418 avec fond blanc (la Selphy rogne les bords en borderless)
|
||||
# Décalage : -roll -12+8 (calibré pour l'offset naturel de l'imprimante)
|
||||
# Option CUPS : PageSize=Postcard.Borderless (défaut imprimante = om_postcard-borderless_100x148mm)
|
||||
# PAS de -o raw : le driver CUPS gère le rendu correctement
|
||||
# =============================================================================
|
||||
|
||||
TEST_MODE="B" # A ou B
|
||||
# (plus de TEST_MODE — paramètres calibrés définitifs ci-dessous)
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
@@ -70,52 +65,24 @@ filename_print="${filename_no_ext}_print.jpg"
|
||||
if ! command -v convert &>/dev/null; then
|
||||
log_error "ImageMagick (convert) non installe — impression de l'original"
|
||||
FILE_TO_PRINT="$filename"
|
||||
PRINT_OPTIONS="-o media=Postcard -o fit-to-page"
|
||||
PRINT_OPTIONS="-o PageSize=Postcard.Borderless"
|
||||
else
|
||||
log_info "Preparation image (mode ${TEST_MODE})..."
|
||||
|
||||
if [ "$TEST_MODE" = "A" ]; then
|
||||
# ── MODE A : 300 dpi exact, fit-to-page ─────────────────────────────
|
||||
# Resize à la résolution native 300 dpi du Selphy (150x100mm).
|
||||
# Le driver CUPS aligne l'image sur le papier sans rognage.
|
||||
# Si des marges blanches apparaissent, passer au mode B.
|
||||
log_info "Preparation image pour impression borderless..."
|
||||
if convert "$filename" \
|
||||
-resize 1772x1181 \
|
||||
-gravity center \
|
||||
-resize 2000x1333 \
|
||||
-background white \
|
||||
-extent 1772x1181 \
|
||||
-gravity center \
|
||||
-extent 2114x1418 \
|
||||
-roll -12+8 \
|
||||
-quality 95 \
|
||||
"$filename_print" 2>/dev/null; then
|
||||
FILE_TO_PRINT="$filename_print"
|
||||
PRINT_OPTIONS="-o media=Postcard -o fit-to-page"
|
||||
log_info "Image preparee (mode A): 1772x1181 → $filename_print"
|
||||
PRINT_OPTIONS="-o PageSize=Postcard.Borderless"
|
||||
log_info "Image preparee: 2114x1418 (overscan+roll) → $filename_print"
|
||||
else
|
||||
log_error "Echec convert mode A — impression original"
|
||||
log_error "Echec convert — impression de l'original"
|
||||
FILE_TO_PRINT="$filename"
|
||||
PRINT_OPTIONS="-o media=Postcard -o fit-to-page"
|
||||
fi
|
||||
|
||||
else
|
||||
# ── MODE B : overscan 5% + fullbleed fill ───────────────────────────
|
||||
# Image légèrement agrandie (5% overscan) pour que la Selphy en mode
|
||||
# Fullbleed puisse rogner les bords sans laisser de marges blanches.
|
||||
# print-scaling=fill remplace le raw mode et laisse le driver gérer
|
||||
# l'alignement — élimine les bordures noires de l'ancien script.
|
||||
if convert "$filename" \
|
||||
-resize 1860x1240 \
|
||||
-gravity center \
|
||||
-background white \
|
||||
-extent 1860x1240 \
|
||||
-quality 95 \
|
||||
"$filename_print" 2>/dev/null; then
|
||||
FILE_TO_PRINT="$filename_print"
|
||||
PRINT_OPTIONS="-o media=Postcard.Fullbleed -o print-scaling=fill"
|
||||
log_info "Image preparee (mode B): 1860x1240 → $filename_print"
|
||||
else
|
||||
log_error "Echec convert mode B — impression original"
|
||||
FILE_TO_PRINT="$filename"
|
||||
PRINT_OPTIONS="-o media=Postcard.Fullbleed -o print-scaling=fill"
|
||||
fi
|
||||
PRINT_OPTIONS="-o PageSize=Postcard.Borderless"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -15,20 +15,15 @@
|
||||
#
|
||||
# ── CALIBRAGE IMPRESSION ─────────────────────────────────────────────────────
|
||||
#
|
||||
# Selphy CP1300 — papier Postcard 150x100mm (ratio exact 3:2)
|
||||
# Image traitée par photobooth-app : 2000x1333 (ratio 3:2)
|
||||
# Résolution cible à 300 dpi : 1772x1181 px
|
||||
#
|
||||
# TEST_MODE contrôle la méthode de préparation :
|
||||
# A — resize 1772x1181 + media=Postcard + fit-to-page (pas de raw)
|
||||
# → marges blanches possibles si le driver ajoute des marges
|
||||
# B — resize 1860x1240 (overscan 5%) + media=Postcard.Fullbleed + print-scaling=fill
|
||||
# → image légèrement agrandie puis rognée par la Selphy pour remplir le papier
|
||||
#
|
||||
# Après validation, laisser la valeur qui donne le meilleur résultat.
|
||||
# Selphy CP1300 — papier Postcard borderless 100x148mm
|
||||
# Image traitée par photobooth-app : 2000x1333
|
||||
# Overscan : 2114x1418 avec fond blanc (la Selphy rogne les bords en borderless)
|
||||
# Décalage : -roll -12+8 (calibré pour l'offset naturel de l'imprimante)
|
||||
# Option CUPS : PageSize=Postcard.Borderless (défaut imprimante = om_postcard-borderless_100x148mm)
|
||||
# PAS de -o raw : le driver CUPS gère le rendu correctement
|
||||
# =============================================================================
|
||||
|
||||
TEST_MODE="B" # A ou B
|
||||
# (plus de TEST_MODE — paramètres calibrés définitifs ci-dessous)
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
@@ -70,44 +65,62 @@ filename_print="${filename_no_ext}_print.jpg"
|
||||
if ! command -v convert &>/dev/null; then
|
||||
log_error "ImageMagick (convert) non installe — impression de l'original"
|
||||
FILE_TO_PRINT="$filename"
|
||||
PRINT_OPTIONS="-o media=Postcard -o fit-to-page"
|
||||
PRINT_OPTIONS="-o PageSize=Postcard.Borderless"
|
||||
else
|
||||
log_info "Preparation image (mode ${TEST_MODE})..."
|
||||
|
||||
if [ "$TEST_MODE" = "A" ]; then
|
||||
# ── MODE A : 300 dpi exact, fit-to-page ─────────────────────────────
|
||||
# Resize à la résolution native 300 dpi du Selphy (150x100mm).
|
||||
# Le driver CUPS aligne l'image sur le papier sans rognage.
|
||||
# Si des marges blanches apparaissent, passer au mode B.
|
||||
log_info "Preparation image pour impression borderless..."
|
||||
if convert "$filename" \
|
||||
-resize 1772x1181 \
|
||||
-gravity center \
|
||||
-resize 2000x1333 \
|
||||
-background white \
|
||||
-extent 1772x1181 \
|
||||
-gravity center \
|
||||
-extent 2114x1418 \
|
||||
-roll -12+8 \
|
||||
-quality 95 \
|
||||
"$filename_print" 2>/dev/null; then
|
||||
FILE_TO_PRINT="$filename_print"
|
||||
PRINT_OPTIONS="-o media=Postcard -o fit-to-page"
|
||||
log_info "Image preparee (mode A): 1772x1181 → $filename_print"
|
||||
PRINT_OPTIONS="-o PageSize=Postcard.Borderless"
|
||||
log_info "Image preparee: 2114x1418 (overscan+roll) → $filename_print"
|
||||
else
|
||||
log_error "Echec convert mode A — impression original"
|
||||
log_error "Echec convert — impression de l'original"
|
||||
FILE_TO_PRINT="$filename"
|
||||
PRINT_OPTIONS="-o media=Postcard -o fit-to-page"
|
||||
PRINT_OPTIONS="-o PageSize=Postcard.Borderless"
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- Selection de l'imprimante (load balancing) ---
|
||||
printer_1_status=$(lpstat -p "$PRINTER_1" 2>/dev/null || echo "not found")
|
||||
printer_2_status=$(lpstat -p "$PRINTER_2" 2>/dev/null || echo "not found")
|
||||
|
||||
SELECTED_PRINTER=""
|
||||
|
||||
if [[ "$printer_1_status" == *"idle"* ]]; then
|
||||
SELECTED_PRINTER="$PRINTER_1"
|
||||
log_info "Imprimante selectionnee: $PRINTER_1 (idle)"
|
||||
elif [[ "$printer_2_status" == *"idle"* ]]; then
|
||||
SELECTED_PRINTER="$PRINTER_2"
|
||||
log_info "Imprimante selectionnee: $PRINTER_2 (idle)"
|
||||
else
|
||||
# ── MODE B : overscan 5% + fullbleed fill ───────────────────────────
|
||||
# Image légèrement agrandie (5% overscan) pour que la Selphy en mode
|
||||
# Fullbleed puisse rogner les bords sans laisser de marges blanches.
|
||||
# print-scaling=fill remplace le raw mode et laisse le driver gérer
|
||||
# l'alignement — élimine les bordures noires de l'ancien script.
|
||||
if convert "$filename" \
|
||||
-resize 1860x1240 \
|
||||
-gravity center \
|
||||
-background white \
|
||||
-extent 1860x1240 \
|
||||
-quality 95 \
|
||||
"$filename_print" 2>/dev/null; then
|
||||
FILE_TO_PRINT="$filename_print"
|
||||
PRINT_OPTIONS="-o media=Postcard.Fullbleed -o print-scaling=fill"
|
||||
log
|
||||
jobs_1=$(lpstat -o "$PRINTER_1" 2>/dev/null | wc -l)
|
||||
jobs_2=$(lpstat -o "$PRINTER_2" 2>/dev/null | wc -l)
|
||||
|
||||
if [ "$jobs_1" -le "$jobs_2" ] 2>/dev/null; then
|
||||
SELECTED_PRINTER="$PRINTER_1"
|
||||
else
|
||||
SELECTED_PRINTER="$PRINTER_2"
|
||||
fi
|
||||
log_info "Aucune imprimante idle, file sur: $SELECTED_PRINTER (P1=$jobs_1 jobs, P2=$jobs_2 jobs)"
|
||||
fi
|
||||
|
||||
# --- Impression ---
|
||||
log_info "Impression x${copies} sur $SELECTED_PRINTER [mode ${TEST_MODE}]: $FILE_TO_PRINT"
|
||||
|
||||
job_output=$(lp -n "$copies" -d "$SELECTED_PRINTER" $PRINT_OPTIONS "$FILE_TO_PRINT" 2>&1)
|
||||
lp_exit=$?
|
||||
|
||||
if [ $lp_exit -ne 0 ]; then
|
||||
log_error "lp a echoue (exit $lp_exit): $job_output"
|
||||
echo "PRINT_ERROR:${SELECTED_PRINTER}:lp_failed"
|
||||
[ -f "$filename_print" ] && rm -f "$filename_print" 2>/dev/null
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extraction du job ID (ex: "request id is Selphy_Blanche_WiFi-42 (1 file(s
|
||||
Reference in New Issue
Block a user