Add kontaktbogen.sh

This commit is contained in:
Brus 2026-06-08 16:14:45 +02:00
commit 526b92c0f2

67
kontaktbogen.sh Normal file
View file

@ -0,0 +1,67 @@
#!/bin/bash
# ===============================================
# Kontaktbogen Generator für sehr große Bildmengen
# ===============================================
# Input: previews/*.jpg
# Output: kontaktbogen_pageX.jpg
# Optimiert für A0 300 dpi (9933x14043 px)
# ===============================================
INPUT_DIR="previews"
OUTPUT_PREFIX="kontaktbogen"
DPI=300
A0_WIDTH=9933
A0_HEIGHT=14043
SPACING=5 # px Abstand zwischen Bildern
LABELS=true # true = Dateinamen anzeigen
MAX_THUMB_HEIGHT=500 # maximale Höhe der Kacheln
# alle JPGs numerisch sortieren
FILES=($(ls -1v "$INPUT_DIR"/*.jpg))
NUM_IMAGES=${#FILES[@]}
echo "Gefundene Bilder: $NUM_IMAGES"
# Max. Bilder pro Seite: Memory-Management
# Empfohlen: max 1000 Bilder pro Montage, bei 13k Bildern -> 13 Seiten
IMAGES_PER_PAGE=1000
TOTAL_PAGES=$(( (NUM_IMAGES + IMAGES_PER_PAGE -1)/IMAGES_PER_PAGE ))
echo "Bilder pro Seite: $IMAGES_PER_PAGE, Gesamte Seiten: $TOTAL_PAGES"
# Kontaktbögen erzeugen
for (( page=0; page<TOTAL_PAGES; page++ ))
do
START=$(( page * IMAGES_PER_PAGE ))
PAGE_FILES=("${FILES[@]:START:IMAGES_PER_PAGE}")
# Optimales Raster berechnen (quadratisch für A0)
NUM_PAGE_IMAGES=${#PAGE_FILES[@]}
COLS=$(awk -v n=$NUM_PAGE_IMAGES -v w=$A0_WIDTH -v h=$A0_HEIGHT 'BEGIN { print int(sqrt(n*w/h)+0.5) }')
ROWS=$(awk -v n=$NUM_PAGE_IMAGES -v c=$COLS 'BEGIN { print int((n/c)+0.9999) }')
# Thumbnail Größe
THUMB_WIDTH=$(( A0_WIDTH / COLS - SPACING ))
THUMB_HEIGHT=$(( A0_HEIGHT / ROWS - SPACING ))
OUTPUT_FILE="${OUTPUT_PREFIX}_page$((page+1)).jpg"
echo "Erstelle $OUTPUT_FILE mit $NUM_PAGE_IMAGES Bildern (Raster: ${COLS}x${ROWS})"
if [ "$LABELS" = true ]; then
montage "${PAGE_FILES[@]}" \
-thumbnail ${THUMB_WIDTH}x${THUMB_HEIGHT}\> \
-geometry +${SPACING}+${SPACING} \
-background white \
-pointsize 12 \
-label %f \
-tile ${COLS}x${ROWS} \
"$OUTPUT_FILE"
else
montage "${PAGE_FILES[@]}" \
-thumbnail ${THUMB_WIDTH}x${THUMB_HEIGHT}\> \
-geometry +${SPACING}+${SPACING} \
-background white \
-tile ${COLS}x${ROWS} \
"$OUTPUT_FILE"
fi
done
echo "Fertig! Alle Kontaktbögen erstellt."