67 lines
No EOL
2.2 KiB
Bash
67 lines
No EOL
2.2 KiB
Bash
#!/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 6500 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." |