Google hat vor einiger Zeit den freien Kodierer Guetzli vorgestellt. Diese neue Entwicklung ist ein kleiner Encoder, der jpgs mit geringerer Dateigröße herstellen kann, als es momentan mit libjpg möglich ist.
Dabei ist er so konzipiert, dass das fertige Bild komplett jpg-konform ist und von allen Anwendungen geöffnet und gelesen werden kann. Lediglich das Kodieren ist zeitaufwändiger und momentan muss es noch auf der Kommandozeile/ Eingabeaufforderung geschehen. Sicherlich wird mittelfristig dies auch in den üblichen Fotoanwendungen Einlass finden.
In diesem Artikel habe ich meine Erfahrungen mal zusammengestellt, einen Test durchgeführt und ein ein kleines Script für Fotografen erstellt. Viel Spaß beim Lesen und ausprobieren - es ist wirklich kinderleicht
Wie bekomme ich Guetzli?
Guetzli gibt es für alle Plattformen hier zum Download.
Möchte man selbst kompilieren, kann man entweder das Githubverzeichnis clonen oder die Sourcen als zip downloaden. Ein einfaches "make" stellt dann das die aktuellste Fassung her. Vorher muss aber libpng (bzw. libpng-dev(el)) installiert sein (siehe Readme!). Nach dem Kompilieren sollte das fertige Binarie in /usr/release liegen, was es bei mir aber nicht tat.
Alternativ bekommt man auch fertige Guetzli-Binaries zum Download. Auf meinem Debian System habe ich den letzten Weg gewählt, das Binarie dann nach /usr/bin verschoben und es ausführbar gemacht.
Wie verwende ich Guetzli?
Die beigefügte Readme-Datei, genau wie die Githubseite, ist sehr auskunftsfreudig. Der Gebrauch ist damit einfach:
guetzli [--quality Q] [--verbose] original.png output.jpg
(Mein Anwendungsbeispiel für die Konsole steht weiter unten)
{ads2}
Guetzli im Test
Ich habe damit nun einen konkreten Test gemacht, indem ich einfach mal ein Foto, welches ich in Originalauflösung vorliegen habe und in der Auflösung 1000x666 hier auf dieser Seite veröffentlichen möchte, einmal mit gimp (libjpg) mit Kompressionsfaktor 80 komprimiert und dann einmal mit Guetzli in der gleichen Auflösung komprimiert habe.
Bei Guetzli muss man allerdings den Umweg über ein png gehen. Andere Quellen sind auch nicht sinnvoll, da das Komprimieren eines kleinen jpg-Bildes die Qualität deutlich herabsetzten würde.
Hier die Bilder zum Vergleich:
1. Das Bild 1000x667px, mit gimp und libjpg komprimiert (Kompression 80) => Dateigröße: 179,1 KB
2. Das Bild 1000x667px, mit Guetzli komprimiert (Kompression 84, weniger geht nicht!) => Dateigröße: 140,9 KB
Der konkret von mir verwendete Befehl war:
guetzli_linux_x86-64 --quality 84 /home/Fotografie/IMG_2170.png /home/Fotografie/IMG_2170-guetzli.jpg
Ich muss sagen, dass ich recht begeistert bin. Zommt man hinein, erkennt man winzige Unterschiede, aber ich würde beinahe sagen, das das Guetzli-jpg die bessere (!) Qualität, trotz der geringeren Dateigröße hat. Wer es selbst mal versuchen möchte, kann ja nun mal testen.
Das Original hat eine Auflösung von 5472x3648. Wer alles an meinem Original mal nachvollziehen und vergleichen möchte, kann es hier runterladen (7,8 MB):
Guetzli als Batchscript
Die Bedienung in der Bash / Kommandozeile ist nun allerdings umständlich, wenn man mehrere Bilder verkleinern möchte. Sinnvoll kann dies beim Veröffentlichen auf Webseiten oder auch beim Erstellen von Bildergallerien sein. Ich habe mir drei kleine Einzeiler überlegt, die das für mich als Batch erledigen. Einfach die Zeilen als Batch speichern.
Aus meinem Rawkonverter erhalte ich jpg- oder tif-Ddateien in voller Auflösung. Verwendet man zum Beispiel Canons dpp unter wine, so haben alle Bilder allerdings die Endung in Großbuchstaben.
1. Umbenennen der Dateiendungen in Kleinbuchstaben:
#!/bin/sh
#Endung Konvertieren
for file in *.JPG; do mv $file ${file%.*}.jpg; done
Das Script kannst Du auch hier runterladen: Script zur Erstellung von Dateiendungen mit Kleinbuchstaben
2. Verkleinern der Originalfiles und Konvertierung zu png
a) Konvertierung von jpg-Dateien
#!/bin/bash
for i in *.jpg; do convert -resize 1000x1000 $i `basename $i .png`-1000px.png; done
Das Script kannst Du auch hier runterladen: Script zur Konvertierung jpg zu png und Verkleinerung
b) Konvertierung von tif-Dateien
Möchte man damit tif-Dateien konvertieren, so muss das "jpg" zu "tif" geändert werden:
#!/bin/bash
for i in *.tif; do convert -resize 1000x1000 $i `basename $i .png`-1000px.png; done
3. Kodieren der Files als Guetzli-jpg
#!/bin/bash
for i in *.png; do guetzli_linux_x86-64 --quality 84 $i `basename $i .jpg`.jpg; done
Das Script kannst Du auch hier runterladen: Guetzli als Batch für ganze Verzeichnisse
Mit den Scripts kann ich bequem mit drei Klicks ein ganzes Verzeichnis konvertieren. Wenn jemand gut im Scripten ist, freue ich mich, wenn man alles in ein Script zusammenfassen könnte.
Weitere Informationen bei heise.de: "Googles Guetzli-Encoder schrumpft JPEG-Bilder um ein Drittel"
Ergänzungen und Tipps zur jpg-Verkleinerung:
- Mit ImageOptim gibt es eine Reihe von guten Tools, die die Größe von jpgs durch weglassen von Metadaten und überflüssigen Headern reduzieren.
- Jpegmini ist ein kommerzielles Produkt (und Closed Source), welches ebenfalls jpgs verkleinert. Die kostenlose Version kann für 20 Bilder pro Tag gratis genutzt werden.