[これは米国 Mozilla のブログ記事 Introducing the 'mozjpeg' Project の抄訳です。文中リンク先は英語となりますのでご了承ください。]
本日(3/5) Mozilla は、「mozjpeg」という新しいプロジェクトを発表しました。これは、現在使用されている大多数のエンコーダとの互換性を維持しつつ、より優れた圧縮を可能にする高品質な JPEG エンコーダの提供を目指すものです。
Mozilla がこのプロジェクトを開始した理由
JPEG は 1992 年ごろに登場し、Web 上のほぼすべての写真は JPEG 形式で提供されています。Web ブラウザだけでなく、画像を表示できるすべてのソフトウェアとほぼ完全な互換性を実現している唯一の不可逆画像圧縮形式です。
ここ数年で平均的な Web サイトに表示される写真の点数は増えており、その写真のサイズも大きくなっています。HTML、JS、CSS ファイルはサイズが比較的小さいため、Web ページを読み込むときに写真がネットワークトラフィックの大部分を占めることになりがちです。こうした画像ファイルのサイズを小さくすることは、最適化の大きな目的の 1 つです。
高品質な JPEG エンコーダの開発は圧縮効率の点で大きく停滞していたため、JPEG に代わるさらに優れた技術を活用することも頻繁に議論されてきました。しかし JPEG をあきらめた場合、大きなマイナス面となるのは、世界中で使用されているソフトウェアとの互換性が比較的低い状態を今後何年も我慢しなければならないだろう、という点です。Mozilla は、アルゴリズムの改善によってこれがいずれ (おそらくすぐに) 価値のあるものになることを疑っていません。しかしながら、本格的な移行が始まったあとでも、JPEG は広く利用され続けるでしょう。
こうした状況の中、JPEG エンコーダは 20 年以上も開発が進められてきましたが、Mozilla は潜在的な圧縮能力が完全に実現できているか疑問を感じていました。多くのエンジニアと話した結果、たとえ厳しい互換性要件の制約があるとはいえ、その答えは「ノー」だという結論に達しました。JPEG エンコーダ研究の有望な方法についてエンジニアたちからのフィードバックを得て、Mozilla は「mozjpeg」プロジェクトを開始したのです。
本日リリースされるバージョン 1.0 は libjpeg-turbo の流れを汲むもので、「jpgcrush」の機能が追加されています。Mozilla は、人々が「jpgcrush」という perl スクリプトを使用して JPEG ファイルのサイズを小さくしていることに気付きました。jpgcrush は Loren Merritt 氏が開発した perl スクリプトで、Web 上のさまざまなフォーラムで取り上げられています。jpgcrush を使用すると少ない劣化でファイルサイズを小さくできます。一般に、IJG libjpeg により PNG から JPEG にエンコードすると 2~6% 小さくなり、ウィキメディアから選んだサンプル画像 1,500 点の JPEG ファイルは平均 10% 小さくなります。jpgcrush では、どの階層符号化構成の場合に使用するビット数が最も少ないかを計算して、ファイルサイズを小さくします。Mozilla が把握している限りでは、これまでにこの機能を組み込んだ高品質のエンコーダはなく、Mozilla が「mozjpeg」に組み込んだものが初めてとなります。
Mozilla の次の目標は、トレリス量子化を活用してエンコードを改善することです。Mozilla の計画を支援したい、またはさらに詳しく知りたいと考える方は、以下のリソースをご利用いただけます。