Zopfli
| Zopfli
| |
|---|---|
| [[Datei:Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)|150px]] | |
| Datei:ZopfliPNG screenshot.png | |
| Basisdaten
| |
| Maintainer | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) |
| Entwickler | Jyrki Alakuijala, Lode Vandevenne |
| Erscheinungsjahr | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) |
| Aktuelle Version | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) (Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)) |
| Aktuelle Vorabversion | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) (Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)) |
| Betriebssystem | plattformübergreifend |
| Programmiersprache | C |
| Lizenz | Apache-Lizenz 2.0 |
| https://github.com/google/zopfli | |
Zopfli ist ein Datenkompressions-Algorithmus, der Daten in das verbreitete Deflate-Format kodiert (bekannt vom ZIP-Dateiformat und von zlib).<ref name="GoogleDevBlog" /><ref name="zopfli-home" /> Zopfli wird als der dateigrößeneffizienteste verfügbare Deflate-Kodierer angesehen.<ref name="Debian" /> Eine Referenzimplementierung wurde als eine freie Programmbibliothek veröffentlicht. Zöpfli ist das schweizerdeutsche Diminutiv für Zopf, eine spezielle ungesüßte Art Hefezopf.<ref name="heise-de" /> Ein weiterer nach einem schweizerischen Gebäck benannter Algorithmus ist Brotli.
Eigenschaften und Anwendungsgebiete[Bearbeiten]
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.<ref name="lifehacker" /> 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.<ref name="theregister" /> 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.<ref>Can I use... Support tables for HTML5, CSS3, etc. Abgerufen am 20. Dezember 2019.</ref>) 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[Bearbeiten]
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.<ref name="thinkdigit" />
Implementierungen[Bearbeiten]
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<ref name="clickalicious">Die Seite Vorlage:Webarchiv/styles.css hat keinen Inhalt.clickalicious/php_zopfli ( vom 11. April 2013 im Webarchiv archive.today), GitHub (englisch)</ref> 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[Bearbeiten]
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.<ref name="ZopfliPNG" />
PNG-Optimierung[Bearbeiten]
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.<ref name="advpng" />
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.
Weblinks[Bearbeiten]
- Projektseite auf GitHub, Online-Implementation (englischsprachig)
- Google's Zopfli Compression Algorithm: Extract higher performance from your compressed files, (Googles Zopfli Datenkompressions-Algorithmus: Erzielen sie höhere Leistung mit ihren komprimierten Dateien) TechRepublic.com (englischsprachig)
Einzelnachweise[Bearbeiten]
<references> <ref name="GoogleDevBlog"> Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Compress data more densely with Zopfli – Google Developers Blog.] Googledevelopers.blogspot.com, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 1. Mai 2013.Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung </ref> <ref name="zopfli-home"> Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig zopfli – Zopfli Compression Algorithm – Google Project Hosting.] Code.google.com, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 1. Mai 2013 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung </ref> <ref name="Debian"> Beschreibung des Debian-Paketes von Zopfli, debian.org (englisch) </ref> <ref name="heise-de"> Zopfli: Neue Kompressionsbibliothek von Google, Alexander Neumann, heise Developer, 1. März 2013 </ref> <ref name="lifehacker"> A Look At Zopfli, Google's Open Source Compression Algorithm, lifehacker.com.au, März 2013 (englisch) </ref> <ref name="theregister"> Vorlage:Cite book/NameVorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Google open sources very slow compression algorithm.] In: The Register. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung </ref> <ref name="thinkdigit"> ThinkDigit: Zopfli: Google's new data compression algorithm (englisch) </ref> <ref name="ZopfliPNG"> google/zopfli google/zopfli, GitHub (englisch) </ref> <ref name="advpng"> Documentation of the AdvanceSCAN advpng utility, advancemame.sourceforge.net (englisch) </ref> </references>