Zopfli can output either a raw DEFLATE data stream or DEFLATE data encapsulated into gzip or zlib formats. It can be configured to do more or fewer iterations than the default 15 to trade processing time for compression efficiency. Under default settings, the output of Zopfli is typically 3–8% smaller than zlib's maximum compression, but takes around 80 times longer. The speed of decompressing Zopfli's output versus zlib's output is practically unaffected. Due to its significantly slower compression speed, zopfli is less suited for on-the-fly compression and is typically used for one-time compression of static content. This is typically true for web content that is served with DEFLATE-based HTTP compression or web content in a DEFLATE-based file format such as PNG or WOFF font files. Another use case is software updates or downloads with software package files that have a zip-based format such as Android application packages or Java Archives, especially over mobile connections.
Technology
The higher data density is achieved by using more exhaustive compression techniques. The method is based on iterating entropy modeling and a shortest path search algorithm to find a low bit cost path through the graph of all possible DEFLATE representations of the uncompressed data.
Implementations
A reference implementation from Google was released in the form of a programming library written in C. It is available as free software under the terms of version 2.0 of the Apache License. A wrapper was created for PHP: php_zopfli. An implementation of Zopfli in C# can be found as part of the CompressSharper library ZopfliDeflater.cs.
History
Zopfli is based on an algorithm from Jyrki Alakuijala. A reference implementation of zopfli was written by Google employees Jyrki Alakuijala and Lode Vandevenne. It was first released to the public in February 2013. Version 1.0.0 was released on April 25, 2013. After several adaptations of Zopfli for PNG compression appeared on GitHub, ZopfliPNG was committed to Google's zopfli reference implementation in May 2013.
PNG optimization
The Zopfli algorithm can be used to compress Portable Network Graphics files because PNG uses a DEFLATE compression layer. There is a PNG optimization tool named ZopfliPNG from the authors of Zopfli. The Zopfli algorithm has also been integrated into other PNG compression optimization tools like advpng from the AdvanceCOMP utility suite, and OxiPNG.