Script: Rekursiv Bilder verlustfrei optimieren (PNG / JPEG und mehr)

Ich möchte gerne ein kleines Script teilen, das rekursiv einen Ordner nach Bilddateien im Format PNG, JPEG, JPG, GIF, TIFF sowie BMP durchsucht und diese verlustfrei optimiert.
Das Script arbeitet leise, legt aber einen definierten Log-Ordner an, in dem die Ausgaben komprimiert abgelegt werden.

Für JP(E)G werden außerdem alle Kommentare sowie Exif Daten entfernt.
Bereits optimierte Bilder werden übersprungen. Also keine Sorge, dass bei täglicher Ausführung die Qualität nach einem Monat am Boden ist. Schließlich wird optimiert, nicht immer wieder komprimiert.

Abhängigkeiten

Unter Debian/Ubuntu können die Abhängigkeiten folgendermaßen installiert werden:

sudo apt-get install jpegoptim optipng

Die Pakete sollten sich in allen gängigen Distributionen finden, alternativ können diese auch „from Source“ installiert werden. Das empfiehlt sich vor allem dann, wenn die aktuellsten Versionen verwendet werden möchten. Den Quellcode kann man sich auf der jeweiligen Entwickler Website herunterladen:

http://optipng.sourceforge.net/
http://freecode.com/projects/jpegoptim

Das Script

Code

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

####
SCANDIR="/var/www/images"
LOGDIR="/var/log/imageopt"
####

[ -d $LOGDIR ] || mkdir -p $LOGDIR
DATE=`date +%d%m%Y_%H%M`

for file in `find $SCANDIR -name *.png -o -name *.bmp -o -name *.gif -o -name *.tiff `; do optipng -quie$
gzip $LOGDIR/optipng_$DATE.log

for file in `find $SCANDIR -name *.jpg -o -name *.jpeg`; do jpegoptim --strip-all -t $file > $LOGDIR/jpe$
gzip $LOGDIR/jpegoptim_$DATE.log

Einzustellen ist der „SCANDIR“ Paramenter. Dieses Verzeichnis wird rekursiv durchsucht.
Falls gewünscht, kann außerdem der Pfad der Log-Dateien geändert werden. Die Log-Dateien werden im Anschluss an das Optimieren komprimiert gespeichert.

Download und Installation

wget http://www.debinux.de/wp-content/uploads/2013/11/image_opt.zip
unzip image_opt.zip 
mv image_opt.sh /usr/local/bin/image-opt
chmod +x /usr/local/bin/image-opt
nano /usr/local/bin/image-opt # Zum Einstellen der Optionen
image-opt # Falls gewünscht manuell ausführen

Automatisches optimieren

Sollen Bilder automatisch jeden Tag um 1 Uhr Morgens optimiert werden, so wird einfach ein Cron-Job hierfür angelegt.

Dazu „sudo crontab -e“ ausführen und am Ende der Datei Folgendes einfügen:

0 1 * * * /bin/bash /usr/local/bin/image-opt

Nach dem Speichern ist der Job installiert.

Wichtiger Hinweis: Sollte dieses Script eingesetzt werden, um WordPress Bild-Dateien zu optimieren, beachtet, dass im Anschluss – quasi als letzte Zeile – die Rechte der Dateien wieder an „www-data“ (oder wer auch immer den Webdienst ausführt) vergeben werden, z.B. …

chown -R www-data: /var/www/XYZ/wordpress/wp-content/uploads

2 Antworten auf “Script: Rekursiv Bilder verlustfrei optimieren (PNG / JPEG und mehr)

  1. Jermaine

    Beim Ausführen des Scripts bekomme ich nur folgende Fehlermeldung:
    „/usr/local/bin/image-opt: Zeile 17: Syntax Fehler: Unerwartetes Dateiende.“

    Kannst du mir da weiterhelfen?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.