PNG画像のファイルサイズ最小化

PNGファイルの画質を劣化させずにファイルサイズを減らす3つのツール、OptiPNG、advpng、pngrewriteについて紹介します。

OptiPNG

OptiPNGはPNGを劣化させずにファイルサイズを減らすコマンドラインツールで、ソースコードとWindows用バイナリが配布されています。

なぜ画像として劣化させずにファイルサイズが減るかというと、PNGには元々圧縮方法が何通りかあるようで、このツールは色々な方法で圧縮してみて一番小さくなったものを採用するということのようです。

例えば、PNGは内部的にはgzipで圧縮していますが、gzipのcompression levelは0~9まであり、この値によって圧縮率に差が生じます。実はImageMagickのデフォルトでは7、Photoshopは5くらいで圧縮しているようで、これを9にして画像を作り直すだけでファイルサイズが減るものが大半です(稀に増えることもありそうですが)。

他にも圧縮ストラテジーやフィルタータイプ(意味は知りません)など、圧縮率に関わる部分で選択の余地があるようで、このツールは最大で1080パターン試して最小のものを見付けます。デフォルトは8パターンを試すだけですが、大半のPNGファイルについてはこれで十分です。

実際に効果があるか無いかという視点で言うと、ネット上に落ちている多くのPNGファイルがOptiPNGで縮みます。もっとも、Photoshop以外のツールで作ったファイルはせいぜい数%しか縮みませんが、それでも大抵は少し小さくなります。また、Photoshopで作ったPNGは30%以上縮むことがあります(Photoshopの名誉のために追記しておくと、全てのバージョンのPhotoshopが巨大なPNGを作るのかどうか、私は知りません。おそらく、どこかのパラメータをいじれば他のツールと同程度には小さくなりそうに思います)。

PNGだらけのディレクトリで

$ optipng *.png

と打つと、ことごとくファイルサイズが減少して面白いです。ただし、デフォルトの挙動では小さくなったファイルを元のPNGファイルに上書きしてしまいますので注意してください。

傾向としては、次に紹介するadvpngの方がトータルでの圧縮成績は上です。OptiPNGはパレットの整理をしますが、advpngはパレットの整理を行いません。また、OptiPNGの方が知名度が高く、実績という意味での安心感があります。この2点を除くとadvpngの方がオススメです。

advpng

advpngはAdvanceCOMPに含まれているコマンドで、OptiPNG同様にPNGのデータ部分を圧縮するものです。両ツールの違いとしては、このツールは7-zipの成果を利用しており、zlibを利用しているOptiPNGよりデータ部分のサイズを小さくできるようです。パレットの整理はしてくれないので、pngrewriteと組み合わせる必要があります。

pngrewrite

pngrewriteは、OptiPNGとは異なり、主にパレットの最適化を行うことでPNGファイルサイズを減少させるツールです。

ホームページの説明によれば無駄なパレットを削減するツールのようなのですが、観察した限りではパレットの順番を変更することでもファイルサイズが減るように見えます。たまにファイルサイズが増えることもあるので注意が必要ですが。

$ pngrewrite test1.png test2.png

とすると、test1.pngのパレットを整理(?)してtest2.pngという名前で保存します。

ちなみに、pngrewriteは256色のPNG画像しか処理できませんので注意してください。

使い方など

OptiPNGとadvpngは共にPNGのデータ部分を再圧縮するツールなので併用する意味はそれほどありませんが、pngrewriteはパレットの整理をする方式なので、併用することが可能です。(必ずしも両方を適用した場合が最小では無いのですが)

多くのファイルに関して言うと、pngrewrite→advpngという順序で適用するのが一番ファイルサイズが小さくなるようです。

これまでGIFとPNGだとPNGの方がファイルサイズが大きくなりがち(特に携帯コンテンツ向けで)という印象があったのですが、この両方のツールを適用すると、実験した範囲ではGIFよりPNGの方が圧倒的に縮みました。特に大きいファイルほどその傾向は顕著でした。また、96×96程度のサイズでもGIFとPNGではファイルサイズが拮抗していました。

コメント / トラックバックはありません

コメントする