[Mozilla] mozjpeg ? [JPEG 最適化]2014/03/07 00:00:00

雲と猫と工事中

JPEG Image の圧縮率を 2~10%程度改善すると位う代物

 

MozillaBlog を覗いてみると、“SIMD 拡張版 IJG JPEG library” からフォークした “libjpeg-turbo” に “JPGCrush” のコードを組み込んで更にフォークしたという代物みたいです

 

“libjpeg-turbo” 自体は、単なる高速な JPEG Encode/Decode ライブラリで、mozjpeg でも単に JPEG Encode/Decode のために使用されており、ここに特別な部分は無く、“JPGCrush” が本題です

この “JPGCrush” は、JPEG Encode されたファイルを解析して、内部構造を最適化することで効率を上げる代物のようです

よって、画質の劣化は有りませんが、世の中には、JPEG の仕様書通りなのに、マイナーな仕様を使ってるが故に多くのソフトでデコードできないファイルが出来てしまうこともあるので、その辺りが少々面倒かもしれません

基本的に、Firefox, IE, Choromium (Google Chrome/Opera)主要ブラウザが使用しているライブラリは “IJG JPEG library” がベースになっているので、“IJG JPEG library” でデコードできれば問題はないのでしょう

 

で、「そういうの、既存のソフトでも存在したよなー……」 と思って、HDD を漁ってみると、矢倉 光洋 さん作 の carmine というものが有りました

carmine は、行われることの少ない 「ハフマンテーブル最適化」 を行い、設定によっては 「撮影情報 (Exif) の削除」 も併用して容量を軽減します

特に、デジタルカメラフィーチャーフォンでは、処理負荷の軽減を行うため、Windowsスマートフォンの画像処理アプリ等で使用されるソフトウェアライブラリに比べハードロジック等の固定処理を増やすことで高速化や省電力化を行っている事が多く、そのような画像に適用すると効果が大きいことも一部では知られています

 

なので、この手の評価には、安いコンパクトデジタルカメラで撮影したデータを carmine で最適化すると効果がわかりやすそうです

画質の劣化なしだと、最適化の精度を上げること迄しか出来ませんが、元のデータの知覚的な劣化を出来るだけ抑えつつ、圧縮しやすく画像をいじると更に圧縮率が上がりますが、そちらのアプローチは、元の画像の劣化が大きいと、わずかに改編するだけでも劣化が大きく進むので、元の画質が高い時にオプションで使えると便利かもしれません

 

 

取り敢えず、WinkShot (中国製の安価なデジタルカメラ), トイカメラ, SH-251s (mova) で撮影した写真を、矢倉 光洋 さん作 の buff で無劣化トリミング (ハフマンテーブルなどの情報をそのまま引き継ぎ、該当部分のデータだけを取り出す) を行い、伊月めい さん作 の JPEG Cleaner で余分な情報を消した後、AzPainter2 で保存した画像 (画質 85, ダウンサンプリング On) も加えて carmine で最適化してみました

 

  • WinkShot : : 2,027bytes → 1,713bytes : -15.5%
  • トイカメラ : ? : 3,165bytes → 2,807bytes : -11.3%
  • SH-251s : : 2,113bytes → 1,815bytes : -14.1%
  • AzPainter2 : 4,936bytes → 4,641bytes : -5.6%

 

確実に縮んでいますが、やはり Windows アプリで保存したものは削減率が低めになっています (通常、ハフマンテーブル最適化はしないので削減はできます)

保存時にこの種の最適化を掛けるだけでもそこそこ縮むことが分かります

 

但し、小さな画像の場合、Exif データやコメントが容量を食うので、要らないデータを削減することも考慮したほうが良いかもしれません (小さな画像の場合、Exif データやコメントは不要な場合も多いです)

 

 

 

なお、掲載画像は、実際に使用した画像を連結して png image として保存したものです