Einführung
Wenn man im Internet eine Fotogalerie publizieren will, oder man viele Fotos per E-Mail verschicken will, sollte man die Fotos verkleinern. Ich habe mir ein Skript geschrieben, welches die Auflösung der Bilder verkleinert und die JPEG-Qualitätsstufe heruntersetzt. Somit kann man ganz schnell viele Bilder verkleinern.
Einzelne Bilder verkleinern
Mit dem Befehl convert kann ein Bild verkleinert werden. Hierzu muss das Paket imagemagick installiert sein.
convert -resize 2048x2048 -quality 60 bild.jpg klein.jpg
Man sieht gut, wie sich die Dateigrösse verändert:
$ du -h bild.jpg klein.jpg
1.5M bild.jpg
168K klein.jpg
Die Datei wurde durch diesen Vorgang um 90% kleiner.
Skript um mehrere Bilder zu verkleinern
Um mehrere Bilder in einem Verzeichnis zu verkleinern, habe ich mir ein Skript
geschrieben. Dieses Skript erstellt den Unterordner small, verkleinert alle
Bilder und gibt aus, wie viele Fotos bereits verkleinert wurden.
#!/usr/bin/env bash
# Variabeln
COUNT=0
TOTAL=`echo *.[Jj][Pp][Gg] | wc -w`
# Optionen
FOLDER="small"
SIZE="2048x2048"
QUALITY="60"
mkdir $FOLDER
for datei in *.[Jj][Pp][Gg]
do
COUNT=`expr $COUNT + 1`
echo $datei: Foto $COUNT von $TOTAL \(`expr 100 \* $COUNT / $TOTAL`%\)
convert -resize $SIZE -quality $QUALITY "$datei" "$FOLDER/$datei"
done
Die Auflösung und die JPEG-Qualitätsstufe kann in den Variabeln angepasst werden.
Die aktuellste Version des Skripts ist auf GitHub in meinem Scripts repository zu finden: imageshrink.
Shell-Funktion
Alternativ kann dies auch als Shell-Funktion in der Datei ~/.bashrc definiert werden:
imageshrink ()
{
local quality="75";
local size="2048x2048";
local outputdir="./small";
mkdir "$outputdir" || return 1;
for image in "$@";
do
echo "[*] Shrinking $image to $outputdir/$image ...";
convert -resize "$size" -quality "$quality" "$image" "$outputdir/$image";
done
}