Das JPEG-Format verspricht, Bilddateien klein zu halten, kann aber nicht immer überzeugen. Der freie Konverter Guetzli versucht, Bilder weiter zu komprimieren, ohne Bildqualität und Kompatibilität zu beeinträchtigen.
Mit JPEG steht seit Langem ein bewährter Standard zur Bildkomprimierung zur Verfügung. Wer genauer hinsieht, erkennt aber schnell, dass die verwendeten Algorithmen teilweise ziemlich unschöne und kaum zu beseitigende Artefakte erzeugen. Die verwendeten Algorithmen arbeiten verlustbehaftet: Sie entfernen für das menschliche Auge kaum sichtbare Details aus den Bildern, um so größere einheitliche Strukturen zu erzeugen, die sich dann besser komprimieren lassen.
TIPP
Es gibt durchaus auch JPEG-Algorithmen wie etwa JPEG2000 oder JPEG-LS [7], die verlustfrei arbeiten, dann allerdings auch größere Bilddateien erzeugen. Einige Varianten von Libjpeg [8] unterstützen diese Verfahren, sollten sich also unter Linux mit der entsprechenden Software nutzen lassen.
Obwohl JPEG-Algorithmen seit Jahrzehnten vielfältige Verwendung finden, gibt es noch ein gewisses Optimierungspotenzial. Einen ersten Vorstoß unternahm Dropbox mit der Einführung des Bildkompressors Lepton, der JPEGs nachträglich verkleinert [1]. Allerdings kann kaum ein Programm die resultierenden Bilder direkt anzeigen; um sie darzustellen, muss man sie erst zurückkonvertieren.
Gerade im Internet spielen Bilder eine wichtige Rolle. Webhoster und Anwender besitzen ein ausgeprägtes Interesse, nicht unnötig viel Speicherplatz zu verschwenden und die Ladezeiten zu reduzieren. Auch Google muss mit seinen Ressourcen haushalten und hat daher seine Entwickler an die Aufgabe gesetzt, Bilddaten zu komprimieren.
Herausgekommen ist das Projekt Guetzli – im Alemannischen die Bezeichnung für eine Süßigkeit oder einen Keks. Unter gewissen, oft eintretenden Voraussetzungen, kann Guetzli JPEG-Bilder gegenüber den bisherigen Verfahren um etwa ein Drittel eindampfen. Durch die kleineren Dateigrößen ergeben sich dann automatisch schnellere Ladezeiten von Webseiten.
JPEGs optimieren in Gimp
In Gimp exportieren Sie Bilder über den Menüpunkt Datei | Exportieren ins JPEG-Format. Im daraufhin erscheinenden Dialog Bild exportieren (Abbildung 1) wählen Sie unter Dateityp: Nach Endung den Punkt JPEG-Bild oder – falls Sie das entsprechende Plugin installiert haben – JP2 image.
Im folgenden Dialog Bild exportieren als JPEG zeigt Gimp unter Erweiterte Einstellungen mehrere Kodierungsmöglichkeiten an. Hier lohnt ein genauer Blick auf die Einstellmöglichkeiten (Abbildung 2). Am besten lassen Sie sich die Vorschau im Bildfenster anzeigen, weil Gimp dabei die Dateigröße der exportierten Bilder berechnet. Bei größeren Bildern dauert das zwar etwas, hilft aber, optimale Parameter zu finden.
Zu den wichtigsten Stellgrößen zählen neben der Qualität die Zwischenschritte und die Glättung. Bei der Qualität handelt es sich um einen eher intuitiv zu verstehenden Parameter. Wie weit Sie ihn herunterschrauben können, hängt stark vom konkreten Bild ab. Die Glättung bewirkt ein moderates Weichzeichnen, was das menschliche Auge oft als gefällig empfindet.
Beim Subsampling greifen Sie über den Parameter Zwischenschritte direkt in den Algorithmus ein und steuern die Qualität der Ergebnisse. Bessere Qualität mit x1,1×1,1×1 (höchste Qualität) (auch als (4:4:4) gekennzeichnet) kostet Rechenzeit und führt zu größeren Dateien. Die Rechenzeit lässt sich über die DCT-Methode beeinflussen, wobei Schnelle Ganzzahlen bei geringen Qualitätsverlusten am zügigsten zur Sache geht.

Abbildung 2: Erweiterte Einstellungen steuern die Details beim Speichern (“Exportieren”) von JPEG-Bildern.
Süße Kommandozeile
Eine Implementation des Verfahrens steht als Befehl guetzli für die Kommandozeile bereit. Die wenigen Optionen (hier “Flags” genannt) – ein Aufruf des Programms ohne Parameter fördert sie zutage – fallen extrem einfach aus (Listing 1).
Listing 1
$ guetzli
Guetzli JPEG compressor. Usage:
guetzli [flags] input_filename output_filename
Flags:
--verbose - Print a verbose trace of all attempts to standard output.
--quality Q - Visual quality to aim for, expressed as a JPEG quality value.
--memlimit M - Memory limit in MB. Guetzli will fail if unable to stay under
the limit. Default is 6000 MB
--nomemlimit - Do not limit memory usage.
Als wichtigster Parameter dient die --quality. Die Entwickler haben hier versucht, die Kompatibilität zu dem von Libjpeg (dem verbreitetsten JPEG-Konverter) verwendeten Qualitätsparameter zu wahren, um eine Vergleichbarkeit zu gewährleisten. Um sichtbare Artefakte zu vermeiden, erlaubt Guetzli nur Werte von --quality 84 oder höher.
Die praktische Anwendung von Guetzli ist extrem einfach. Ein Aufruf nach folgendem Schema konvertiert ein Bild in ein Guetzli-JPEG:
$ guetzli --quality <I>nn<I> <I>Eingabe<I> <I>Ausgabe<I>.jpg
Da Guetzli Bilder zum Bearbeiten vollständig in den Hauptspeicher lädt, können Sie bei Bedarf auch die Eingabedatei überschreiben (guetzli bild.jpg bild.jpg). Das Programm gibt dabei keinerlei Warnung aus.
Die Eingabedatei darf in den Formaten JPEG oder PNG vorliegen; jedes andere Format führt zur Fehlermeldung Error reading JPG data from input file. Bei der Eingabe erwartet Guetzli Bilder mit dem Farbprofil sRGB und einem Gamma von 2.2 – eine gängige Voreinstellung bei Kameras. Abweichende Farbprofile ignoriert das Tool, sodass Sie das Ausgangsbild gegebenenfalls umwandeln müssen, um falsche Farben zu verhindern. Bei PNGs mit Alphakanal wandelt Guetzli die transparenten Bereiche in schwarze Flächen um.
So gut Guetzli funktioniert, hat es doch eine Schattenseite: Zum einen benötigt es im Vergleich zu den durch Libjpeg bereitgestellten Algorithmen deutlich mehr Rechenleistung. Auch der RAM-Bedarf liegt mit etwa 300 MByte pro Megapixel ungewöhnlich hoch. Die sorgfältige Analyse kosten Zeit und Platz.
Guetzli selbst bauen
Nicht alle gängigen Distributionen führen Guetzli in ihren Paketquellen. Um das Programm zu testen, müssen Sie es daher eventuell selbst bauen. Die aktuellste Version finden Sie auf Github [9], wo die Entwickler ständig am Code feilen. Zuletzt reduzierten sie dabei den Speicherverbrauch um 16 Bytes pro Pixel – angesichts des hohen Speicherbedarfs von Guetzli durchaus wichtig. Unter Arch Linux empfiehlt sich, die Git-Version aus dem AUR zu installieren.
Als Abhängigkeit benötigt Guetzli die aktuelle Devel-Version der Libpng. Beim Bauen setzen die Entwickler von Guetzli allerdings nicht auf die bekannten Verfahren, sondern nutzen das unter Linux eher selten verwendete Bazel [10], was zunächst einigen Installationsaufwand verursacht. Anschließend genügt das Kommando bazel build -c opt //:guetzli, das benötigte “Rezept” bringt der Quellcode mit.
Hintergrund
Es scheint erstaunlich, dass sich heute noch Möglichkeiten finden lassen, bewährte Verfahren wie die JPEG-Kodierung zu verbessern. Alle JPEG-Algorithmen verwenden als Methode zur Datenreduktion neben einer (Laufzeit-)Komprimierung Verfahren, um für das menschliche Auge nicht sichtbare Bildteile herauszufiltern und zu entfernen.
Hier setzt auch Guetzli an und verwendet dabei ein neues “psychovisuelles Modell”. Die Entwickler erklären es so: “Guetzli versucht eine Balance zwischen minimalem Verlust und Dateigröße, indem ein Suchalgorithmus eingesetzt wird, der den Unterschied zwischen der psychovisuellen Modellierung des JPEG-Formats und dem psychovisuellen Modell von Guetzli überwinden will.” Guetzlis als “human visual processing system model” bezeichneter Algorithmus zum Erkennen wesentlicher Bestandteile von Bildern basiert auf einem Butteraugli genannten Verfahren, das auch als separates Werkzeug zur Verfügung steht [2].
Der besondere Trick der von Guetzli angewendeten Methode besteht im sogenannten Visual Masking, dem Überdecken einer Bildinformation durch einen nahe gelegenen zweiten (starken) Reiz. In einigen Aspekten ähnelt dies der unscharfen Maske, dem besten von Gimps Schärfungsfiltern. In diesem Fall betont der Algorithmus eine Kante im Bild durch eine zweite, in der unmittelbaren Nähe gelegenen Kante. Der unscharfen Maske und Guetzli ist gemeinsam, dass sie sich an der visuellen Wahrnehmung des Menschen orientieren und nicht unbedingt mathematisch exakte Ergebnisse erzeugen.
Da sich die für das Erkennen relevanter Bildinformationen verwendeten Modelle selbst bei den JPEG-Konvertern unterscheiden, differieren auch die darauf basierenden Algorithmen und arbeiten unterschiedlich effektiv. Es nützt also, die “richtigen” Teile aus Bildern zu entfernen, um gleichzeitig eine geringe Dateigröße und gute visuelle Qualität zu erhalten.
Die auf der visuellen Wahrnehmung basierenden, relativ universellen Verfahren bezeichnet man als “perceptual”. Sie unterscheiden sich aber in vielen Details. Vertiefende Informationen zum Guetzli-Algorithmus finden Sie im Blog der Google-Entwickler [3]. Dort zeigen die Programmierer auch an einem Beispiel, dass die Artefakte in der Umgebung (“ringing artefacts”) bei Guetzli geringer ausfallen als bei anderen Algorithmen.
Abbildung 3 zeigt, wie sich Guetzli (rechts) im Vergleich zu Libjpeg (links) verhält. Abbildung 4 vergleicht die beiden Ebenen in zehnfacher Vergrößerung mittels des Gimp-Ebenenmodus Faser extrahieren. In dieser Darstellung treten die sehr vielen kleinen Unterschiede deutlich hervor.

Abbildung 3: Links das Originalbild (mit Lightzone entwickelt), rechts die mit Guetzli bearbeitete Variante.
Wie gut der Algorithmus funktioniert, überprüfen die Entwickler regelmäßig in einem Experiment mit mehreren Bildern. Sie berichten von einem Test, in dem über 75 Prozent der Probanden die mit dem Guetzli-Algorithmus erzeugten Bilder besser bewerteten als die durch Libjpeg erstellten. Vereinzelt finden sich allerdings auch Berichte von Anwendern, die Kritik an der Qualität von Guetzli üben. So ganz überzeugend können diese Aussagen allerdings nicht, da beispielsweise oft die verwendeten Bilder fehlen und sich die Kritik daher nicht nachvollziehen lässt.
Guetzli geht aber auch beim Packen der Daten noch einen Schritt weiter. Mit einem als “quantization stage of compression” bezeichneten Prozess reduziert es die Datenmenge [4]. Dieser Prozess wurde in den letzten Jahren kontinuierlich vom Chefentwickler Jyrki Alakuijala weiterentwickelt und optimiert. Das führte zu einer ganzen Reihe von Programmen, die das Rekomprimieren übernehmen.
Zusatzprogramme
Aus dem Github-Repository von Guetzli entsteht beim Übersetzen neben Guetzli noch das Heatmap-Programm guetzli-compare.py, mit dem sich die Unterschiede zwischen Originalbild und bearbeiteter Version als Heatmap darstellen lassen. Auch das Butteraugli-Programm gehört im weiteren Sinn zu Guetzli und lässt sich separat bauen und installieren. Was die Quantisierung angeht, finden sich im Guetzli-Umfeld eine ganze Reihe von Werkzeugen, die unter anderem auch PNG-Bilder optimieren und sogar ZIP- und Gzip-Archive verkleinern.
Zunächst stellten die Entwickler 2013 einen als Zopfli bekannt gewordenen Algorithmus der Öffentlichkeit vor [5]. Er verwendet wie ZIP, Gzip und PNG das Deflate-Format, geht dabei aber gründlicher zur Sache. Das kostet mehr Rechenleistung, was das Verfahren insbesondere für einmal erzeugte, oft gelesene und verbreitete Dateien interessant macht. Mit dieser Methode lassen sich Gimp-Bilder besser verkleinern als mit BZIP2, allerdings fällt die durch XZ erzeugte Version oft noch etwas kleiner aus.
Die Zopfli-Suite umfasst mehrere Programme (siehe Tabelle “Zopfli-Programme”). Das universellste davon, Advdef (“AdvanceCOMP Deflate”), dient zum Rekomprimieren bestehender Bilder. Die derzeitige Implementation benötigt viel physikalischen Speicher, was die Größe der Eingabedateien begrenzt. Der Schalter -z aktiviert die Rekomprimierung. Die Parameter -0 bis -4 steuern (ansteigend) den Grad der Rekomprimierung.
Über -i Anzahl beeinflussen Sie die Anzahl der Durchgänge und damit indirekt die Optimierung; die Vorgabe liegt bei 15 Durchgängen. Höhere Werte verbessern das Ergebnis für die Modi -3 und -4, benötigen aber mehr Rechenleistung. Durch -f (“force”) erzeugt Advdef auch dann Ausgabedateien, wenn diese größer ausfallen als die Eingabedateien.
2015 brachten die Entwickler mit Brotli eine Weiterentwicklung von Zopfli in die Öffentlichkeit [6]. Dabei handelt es sich um eine Variante von LZ77 und des Huffman-Codings, die nochmals bessere Ergebnisse verspricht. Hier gibt es mit bro nur noch ein einziges Programm zur Komprimierung. Die Option -h zeigt an, welche Optionen und Parameter die Bearbeitung steuern.
|
Programm |
Funktion |
|---|---|
|
|
PNG, MNG, GZ, TGZ und SVGZ rekomprimieren |
|
|
ZIP komprimieren |
|
|
PNG (re-)komprimieren |
|
|
Animierte PNGs (MNG-Format) komprimieren |
Fazit
Guetzli und seine Verwandten demonstrieren, dass sich bei der Bildbearbeitung selbst heute noch neue Optimierungen finden lassen. Neben speziellen visuellen Optimierungen helfen dabei auch die bei der Quantisierung entwickelten Verfahren. Insbesondere Betreiber von Webseiten, die JPEG- oder PNG-Bilder verwenden, sollten prüfen, ob und inwieweit die hier vorgestellten Programme für sie infrage kommen.
Infos
-
Butteraugli: https://github.com/google/butteraugli
-
“Announcing Guetzli”: https://research.googleblog.com/2017/03/announcing-guetzli-new-open-source-jpeg.html
-
Guetzli-Infos: https://designmodo.com/guetzli/
-
Zopfli: https://github.com/google/zopfli
-
Brotli: https://github.com/google/brotli
-
JPEG-LS: https://jpeg.org/jpegls/index.html
-
Libjpeg: https://github.com/thorfdbg/libjpeg
-
Guetzli: https://github.com/google/guetzli
-
Bazel: https://bazel.build/







