Bilder verkleinern

Ein Bild wird hiermit proportional auf eine Breite von 100 verkleinert:
convert -scale 100x grossesbild.jpg kleinesbild.jpg

Statt 100x kann man auch eine Prozentzahl angeben:
convert -scale 20% grossesbild.jpg kleinesbild.jpg

Beispiele um alle Bilder in einem Verzeichnis zu verkleinern:
for file in *; do convert -scale 100x $file klein_$file; done
for file in *.jpg; do convert -resize 20% $file `basename $file .jpg`_thumb.jpg; done
for i in `ls *.jpg` ; do convert -geometry 1024x1024 -quality 90 $i xga_$i ; done

Hier noch ein Skript, um Bilder recht komfortabel zu verkleinern:

#! /bin/bash
subdir=scaled

function err_text {
while [ $# -gt 0 ] ; do
 echo "$1" 1>&2 # Ausgabe auf stderr
 shift
done
echo "`basename $0` [-ab -c Wert -d Wert] file" 1>&2 # Ausgabe auf stderr
exit 1
}

set -- `getopt "r:" "$@"` || err_text
res=0
dir=~
while : ; do
 case "$1" in
 -r) shift; res=$1;;
 --) break;;
 esac
 shift
 [ $# -eq 0 ] && break # Fehler in den angegebenen Parametern
done
shift

#Gültigen Pfad ermitteln bzw. abfragen
if [ "$1" == "" ] ; then
 dir=`kdialog --getexistingdirectory "$dir" --caption "ScaleImage"`
 [ $? -eq 1 ] && exit
else
 dir="$1"
 [ -d "$dir" ] || dir="${1%/*}" # Dateinamen vom Pfad abtrennen
 [ -d "$dir" ] || exit # kein gültiger Pfad
fi

# ggf. Auflösung setzen
if [ $res -eq 0 ]; then
 res=`kdialog --title "ScaleImage" --inputbox "Maximale Bildabmessung in Pixel" "500"`
 [ $? -eq 1 ] && res=500
fi

if [ -f "$1" ] ; then
 echo "Scaliere $1 auf eine maximale Größe von $res Pixeln"
 convert -scale "$res"x"$res" "$1" "$dir/scaled/${1##*/}"
else
 echo "Scaliere alle JPG-Bilder in $dir auf eine maximale Größe von $res Pixeln"
 cd "$dir"
 [ -d scaled ] || mkdir scaled
 for i in * ; do
 ext=`echo ${i##*.} | tr [:lower:] [:upper:]`
 if [ "$ext" == "JPG" ]; then
 echo "$i"
 convert -scale "$res"x"$res" "$i" scaled/"$i"
 fi
 done
fi