Zopfli

Zopfliは、Deflate・gzip・zlib形式でのデータ圧縮を行うソフトウェアである。他のDeflate・zlibの実装よりも高い圧縮率となるが、圧縮時により多くの時間が必要となる。2013年2月にGoogleよってライブラリとしてApache 2.0の下でフリーソフトウェアとしてリリースされた。"Zöpfli"という名前は甘くない種類のであるに、スイスドイツ語の指小辞である"li"を付けたものである。
特性と用例.
Zopfliは生のDeflateデータストリームか、gzipかzlib形式でカプセルされたDeflateデータを出力することができる。デフォルトでは15回処理が繰り返されるが、これを変更することで処理時間と圧縮率のどちらを優先するかを選ぶことができる。
デフォルトの設定ではZopfliの出力はzlibの最大圧縮のものより一般的に3 - 8%小さくなるが、圧縮処理には80倍の時間が必要となる。伸長速度はzlibの出力と殆ど同じである。
Zopfliの圧縮速度は非常に遅いのでオンザフライ圧縮にはあまり適しておらず、一般的に静的なコンテンツを1回だけ圧縮するのに使用されている。これは一般的にDeflateベースので配信されるウェブコンテンツか、PNGやWOFFなどのDeflateベースのファイルフォーマットのウェブコンテンツに当てはまる。別の使用例はAPKやJARなどのZIPベースのソフトウェアパッケージを使用したソフトウェアのアップデートやダウンロードをする場合である。これは特にモバイル通信で当てはまる。
技術.
Zopfliの高い圧縮率はより徹底して圧縮処理を行うことによって達成されている。この方法はエントロピーモデルの反復と最短経路アルゴリズムを繰り返し使用し、全ての可能なDeflate表現のグラフからビットコストの低いパスを見つけるものである。
実装.
Googleによるリファレンス実装はC言語で書かれており、ライブラリとしてリリースされた。これはApache 2.0の下でフリーソフトウェアとして配布されている。
ラッパーはPHP用に作成された。
C#によるZopfliの実装は"CompressSharper"ライブラリの"ZopfliDeflater.cs"で見られる。
歴史.
ZopfliはJyrki Alakuijalaによるアルゴリズムに基づいている。Zopfliのリファレンス実装はGoogleの従業員であるJyrki AlakuijalaとLode Vandevenneによって書かれた。2013年2月に初めて公開され、4月25日にバージョン1.0.0がリリースされた。PNG圧縮のためのZopfliの幾つかの改良がGitHubに登場した後、"ZopfliPNG"は5月にリファレンス実装にコミットされた。
PNGの最適化.
PNGはDeflateを使用するので、Zopfliを使用して圧縮することができる。Zopfliの作者によるZopfliPNGというPNG最適化ツールがある。Zopfliアルゴリズムはの"advpng"ような他のPNG最適化ツールにも統合されている。