Zopfli
# Zopfli

Zopfli ist ein Datenkompressions-Algorithmus, der Daten in das verbreitete Deflate-Format kodiert (bekannt vom ZIP-Dateiformat und von zlib). Zopfli wird als der dateigrößeneffizienteste verfügbare Deflate-Kodierer angesehen. Eine Referenzimplementierung wurde als eine freie Programmbibliothek veröffentlicht. Zöpfli ist das schweizerdeutsche Diminutiv für Zopf, eine spezielle ungesüßte Art Hefezopf. Ein weiterer, nach einem schweizerischen Gebäck benannter Algorithmus ist Brotli.

## Eigenschaften und Anwendungsgebiete

Zopfli kann entweder rohe Deflate-Daten oder ins gzip- oder zlib-Format verkapselt ausgeben. Es kann eingestellt werden, mehr oder weniger als die voreingestellten 15 Iterationen zu absolvieren, um Rechenzeit gegen Kompressionsdichte abzuwägen.
Mit der Standardeinstellung erreicht es mit denselben Daten üblicherweise etwa 5 % bessere Kompressionsdichte als zlib, benötigt dazu jedoch etwa 80-mal mehr Zeit. Die Dekompressionsgeschwindigkeit bleibt davon praktisch unberührt.
Daher eignet es sich deutlich weniger für Komprimierung auf Abruf und zahlt sich aus, wenn Daten einmalig komprimiert und ausreichend oft zum Beispiel über ein Netzwerk ausgeliefert werden. Das trifft üblicherweise bei statischen Web-Inhalten zu, die mit in der Regel Deflate-basierter HTTP-Kompression ausgeliefert werden oder in einem Deflate-basierten Dateiformat wie PNG oder WOFF-Schriftartdateien vorliegen. (Bis vor kurzem unterstützten die meisten Web-Clients nur Deflate oder gzip und keine fortschrittlicheren Formate wie Brotli oder xz, inzwischen wird der Brotli Algorithmus jedoch von fast allen großen Browsern unterstützt). Ein weiteres Anwendungsfeld sind Software-Aktualisierungen oder Downloads mit Software-Paketdateien, die ein ZIP-basiertes Format haben wie Android application packages (APK) oder Java Archives (JAR), besonders über mobile Internetverbindungen.

## Technik

Die höhere Datendichte wird durch die Anwendung gründlicherer Kompressionstechniken erreicht. Die Methode basiert auf iterierender Entropiemodellierung und einer Kürzester-Pfad-Suche, um einen Pfad mit niedrigen Bitkosten durch den Graphen aller möglichen Deflate-Repräsentationen zu finden.

## Implementierungen

Es existiert eine Referenzimplementierung von den Autoren in Form einer in C geschriebenen Programmbibliothek. Sie ist als freie Software auch im Quelltext unter den Bedingungen von Version 2.0 der freizügigen Apache-Lizenz verfügbar.
Mit php_zopfli gibt es eine erste Implementierung in PHP. Wegen der gzip-/zlib-kompatiblen Datenkompression kann diese Bibliothek auch für die Komprimierung von Daten vor der Auslieferung an Clients analog zu gzencode eingesetzt werden.

## Geschichte

Zopfli basiert auf einem Algorithmus von Jyrki Alakuijala. Zopfli wurde von den Google-Angestellten Jyrki Alakuijala und Lode Vandevenne als ein Nebenprojekt in ihrer „20-Prozent-Zeit“ entwickelt und in einer Programmbibliothek implementiert. Sie wurde im März 2013 erstmals veröffentlicht. Eine offizielle Version 1.0.0 wurde am 25. April 2013 herausgegeben. Das Erscheinen von Zopfli verdrängte Ken Silvermans KZIP als die dateigrößeneffizienteste Deflate-Implementierung und 7-Zips Deflater als die dateigrößeneffizienteste frei lizenzierte.
Nachdem mehrere Zopfli-Adaptionen für PNG auf GitHub aufgetaucht waren, findet sich in der aktuellen Git-Version von Zopfli seit Mai 2013 der PNG-Optimierer ZopfliPNG.

## PNG-Optimierung

Der Zopfli-Algorithmus kann zur Komprimierung von PNG-Dateien genutzt werden, da das PNG-Format eine Deflate-Kompressionsschicht nutzt. Es gibt ein PNG-Optimierungswerkzeug namens ZopfliPNG von den Zopfli-Autoren. Der Zopfli-Algorithmus wurde auch in andere PNG-Optimierungswerkzeuge wie advpng aus der AdvanceCOMP-Sammlung integriert.
Silvermans KZIP-basierter PNG-Kodierer PNGOUT war das Einzelwerkzeug, das die kleinsten PNG-Dateien erzeugte. Es wird durch Zopfli-basierte PNG-Kodierer und -Optimierungswerkzeuge übertroffen.