Bilder für HTML mit imagemagick

Meine Bilder für die Homepage werden meistens mit den selben Arbeitsschritten umgewandelt. Daher bietet es sich an, ein Skript zu erstellen, das diese Schritte übernimmt. Da es mit den bisher genutzten Tools immer mal wieder Probleme gibt (wird nicht mehr gepflegt, funktioniert plötzlich nicht mehr), habe ich mich entschieden, selbst eine Bash-Skript zu erstellen, welches die Tools von imagemagick nutzt.

Das Skript soll die folgenden Punkte abhandeln:

  1. Die Fotos im Ordner work lesen.
  2. Die Ergebnisse sollen im Ordner out landen.
  3. Die Fotos auf 1024×1024 Pixel skalieren, dabei aber die Proportionen beibehalten.
  4. Das Erstellungsdatum unten rechts im Foto einfügen.
  5. Meinen „Stempel“ als Wasserzeichen in das Foto platzieren.
  6. Das Foto im out Verzeichnis speichern als image_<index>_<Datum>.jpg
  7. Jetzt das Foto auf 480×480 Pixel skalieren.
  8. Das Foto im out Verzeichnis speichern als thumb_<index>_<Datum>.jpg

Erst einmal werden Eingangs- und Ausgangsorder definiert und abgefragt.

#! /bin/bash

pathin=/home/andreas/data/html/work/
pathout=/home/andreas/data/html/out/
stempel=/home/andreas/data/html/Copyright_Stempel100.png

if [ ! -e $pathin ]
then
    echo "Pfad mit Quelldateien nicht gefunden: $path"
    exit 1
fi

if [ ! -e $pathout ]
then
    echo "Pfad für Ausgabedateien nicht gefunden: $path"
    exit 1
fi

Da alle JPG-Dateien im Eingangsorder bearbeitet werden sollen, werden sie über eine for-Schleife abgearbeitet.

imgno=0
for image in ${pathin}/*.jpg ${pathin}/*.JPG
do

Jetzt wird ein Foto nach dem anderen bearbeitet.

if [ -e $image ]
then
    imgbase=`basename $image`
    echo "${imgbase} started"
    imgdate=`identify -ping -format '%[exif:datetimeoriginal]' ${image} | tr " " : | awk -F: '{ print $3"."$2"."$1 }'`

    k="$(printf '%03d' "$imgno")"
    ((imgno++))

    newimg="${pathout}/image_${k}_${imgdate}.jpg"
    thumbimg="${pathout}/thumb_${k}_${imgdate}.jpg"

    convert ${image} -resize 1024x1024\> ${newimg}

    quality=`identify -ping -format '%Q' ${newimg}`
    convert -quality ${quality} -font Helvetica -fill honeydew -pointsize 20 -gravity SouthEast -annotate 0 "${imgdate}" ${newimg} ${newimg}

    composite -compose atop -geometry +120 -gravity southeast ${stempel} ${newimg} ${newimg}

    convert ${newimg} -resize 480x480\> ${thumbimg}
    echo "${newimg} finished"
fi

Das Schließen der for-Schleife nicht vergessen … 😉

done