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
}