Add kontaktbogen.sh
This commit is contained in:
parent
82743a63c7
commit
526b92c0f2
1 changed files with 67 additions and 0 deletions
67
kontaktbogen.sh
Normal file
67
kontaktbogen.sh
Normal 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."
|
||||||
Loading…
Add table
Add a link
Reference in a new issue