Passbilder am Drogerie/Discounter Fotodrucker
Immer wieder ärgere ich mich wenn ich neue Passbilder brauche. Zwar ist eine Foto selbst schnell gemacht, aber die Vorbereitung für das Drucken ist immer wieder eine nervige Angelegenheit. Wie groß muss das Foto gleich wieder sein? Wie bekomme ich es hin das am Fotodrucker genau diese Größe am Ende rauskommt? Macht der Fotodrucker mein Foto etwas größer und in welchem Maße?
Bislang bemühte ich dazu Gimp und einen Taschenrechner. Nachdem ich nun das Tool montage
kenne, habe ich ein kleines wrapper script geschrieben um diese Schritte automatisiert zu machen.
Manuelle Schritte:
- Foto machen und auswählen
- Foto zuschneiden nach der Maske für Passfotos (kinder) und dem Verhältnis 35:45
- Evtl. Lichtverhältnisse (Helligkeit/Kontrast/…) optimieren
- Bestimmen der Druckgröße. Bei dm ist z.B. das Standardformat am Fotodrucker 10x15cm
Schritte die das Programm übernimmt:
- Auslesen der Auflösung und Maße aus dem Foto / der Quelldatei
- Bestimmen der Auflösung der Zieldatei so dass das Foto mit der optimalen Qualität eingefügt wird.
- Berechnung der horizontalen und vertikalen Rahmen so genau 2 auf 2 Passfotos auf das Zielfoto passen.
- Einfügen der Fotos mittels dem Tool
montage
Hier das Script für MacOS / ZSH:
#!/usr/bin/env zsh
# Groesse in cm des Zielformats
PHOTO_W=10
PHOTO_H=15
WORK_DIR=$(pwd)
SCRIPT_DIR=$(cd $(dirname $0) && pwd)
if [[ -z "$1" ]]; then
echo "No input file given. Usage: $0 <IMG>"
exit 1
fi
IMAGE_IN_PATH=$(cd $SCRIPT_DIR && cd $(dirname $1) && pwd)/$(basename $1)
IMAGE_OUT_PATH=$(cd $SCRIPT_DIR && cd $(dirname $1) && pwd)/out-${PHOTO_W}x${PHOTO_H}.jpg
if [[ ! -f "${IMAGE_IN_PATH}" ]]; then
echo "File not found: ${IMAGE_IN_PATH}"
exit 1
fi
# Auslesen des Formats der Quelldatei
eval $(identify -format 'IMG_WIDTH=%w\nIMG_HIGHT=%h\n' ${IMAGE_IN_PATH})
echo "Using file ${IMAGE_IN_PATH} with size ${IMG_WIDTH}x${IMG_HIGHT}"
# Berechnung der horizontalen und vertikalen Rahmen
BORDER_VERT="$(echo $(( (( ${IMG_WIDTH} / 3.5 * ${PHOTO_W} ) - ( 2 * ${IMG_WIDTH} )) / 4 )) | awk '{ print int($1) }')"
BORDER_HORT="$(echo $(( (( ${IMG_HIGHT} / 4.5 * ${PHOTO_H} ) - ( 2 * ${IMG_HIGHT} )) / 4 )) | awk '{ print int($1) }')"
# Anwendung des Tools montage
montage \
${IMAGE_IN_PATH} ${IMAGE_IN_PATH} ${IMAGE_IN_PATH} ${IMAGE_IN_PATH} \
-geometry ${IMG_WIDTH}x${IMG_HIGHT}+${BORDER_VERT}+${BORDER_HORT} \
-quality 100 \
${IMAGE_OUT_PATH}
Das Script kann in diesem Repo gefunden werden: https://github.com/MichaelKlemm/passphoto-tools