pngcrushでPNGファイルから不必要と思われるメタデータを削除

PNGファイルにはメタデータとして様々な情報を埋め込むことができる。その様々な情報のうちガンマとカラー・プロファイルの情報はブラウザでの表示に影響を与えることがあるので、そこそこ使いやすいpngcrushで削除するのが無難。それら影響を与えることがあるメタデータを削除してやれば、WindowsのPhotoshopで作ったPNGファイルがMac(Leopard)のSafariで色がずれるなどといった現象を回避することができる。

pngcrushのWindows向けバイナリはダウンロード・ページの下の方にあるpngcrush-executablesの方からダウンロードできる(2009/07/03時点ではpngcrush-1.6.15-win32.zipが最新)。pngcrush-1.6.19.zipとかはソースのみなので注意。関係ないけどsourceforge.netは見づらくなった気がする……。

あるPNGファイル(input.png)から不必要と思われるメタデータを削除して圧縮したPNGファイル(output.png)を作成するには、

C:> "C:\Program Files\pngcrush\pngcrush.exe" -rem alla -l 9 input.png output.png

とコマンド プロンプトで実行してやれば良い。-rem allaと指定すると、削除してもあまり影響のないメタデータを削除してくれる(「removes all known ancillary chunks except for tRNS」)ので、-rem gAMA -rem sRGB -rem tEXtなどと個別に指定する必要はない。-l 9-bruteでも構わないが、-l 9の方が速い。

@echo off

move %1 %1.bak
"C:\Program Files\pngcrush\pngcrush.exe" -rem alla -l 9 %1.bak %1

以上のようなバッチ・ファイルを作れば、ドラッグ・アンド・ドロップ(や送る等)から一発で削除して圧縮できるようになる。

メタデータを確認したい場合は、

C:> "C:\Program Files\pngcrush\pngcrush.exe" -n -v input.png

とコマンド プロンプトで実行してやれば良いが、かなり読みづらい。閲覧に関してはGUIなTweakPNGで行うのが良さそう。

いちいちバッチファイルに通すのは面倒くさいというのなら、メタデータを出力しないオプションを持つSuperPNGというPhotoshopのPNG書き出しプラグインを使うというのも悪くはない。圧縮率も5段階で調節できるのでそこそこ使える。

追記@2009-11-25T04:21:16+09:00

2009-11-25現在の最新版1.7.5のWindowsの実行ファイルをコンパイルしてGitHubにアップロードしておいた。今後も気が向いたらアップロードするつもりだがいちいちアナウンスはしないと思うので、トラックしたい人はGitHubで僕をフォローするか、フィードを購読すると良い。