Edited at

photoshopで作成したpngがImageMagickでエラーする場合

More than 3 years have passed since last update.

なぜかごくまれにPhotoshopで作成したpngをImageMagickでconvertすると

convert: Corrupt image `test.png'

と怒られることがあります。

それでWindows端末で表示してみたりしても何も異常がなかったり。

そんな事ありませんか?

もしかしたらそれは libpngの不具合かも。

不具合というのはlibpng に失礼かもしれないのですが。

小生はこれで長いこと悩んでいたのですが最近になってようやく

(1) Photoshopでpngを作成するとまれにデータ長0のIDATチャンクが作成される事がある

(2) libpngはデータ長0のIDATチャンクを見るとCorruptと言って怒る

この2つの条件が重なって問題になることがわかりました。

Photoshop(のどれかのバージョン) は8kバイト毎にチャンクを作るようで

画素データがちょうと8kの倍数だと最後にデータ長0バイトのチャンクをくっつけるようなのです。

この事が厳密にpngの仕様に違反するかどうかはわからないですが

libpng先生はこのようなチャンクはお気に召さないようです。

(昔のバージョンではエラーにならないこともあるようです)

8192回に一回エラーが起きるわけですね。

そこでお行儀の悪いこの0バイト長のIDATチャンクを取り除くスクリプトを書きました

https://gist.github.com/wittyfool/8fc20baffaeab2990a2d

[参考]

PNGについて

http://homepage2.nifty.com/sophia0/png.html