IE で PNG 透過表示ができない?
雪山でキャンプしてる人達や、雪のため電車が遅れて打ち合わせに参加し損なった人が居る中で、のんびり 将棋界で一番長い日 を楽しもうと思ったのだけどやっぱり無理でした。
象歩の将棋盤は Python Imaging Library (PIL) を使ってダイレクトに PNG 画像を作ってるわけですが、 IE6.x では PNG の透明画像をうまく表示できないようです。 256 色パレットの透明色は表示できるようなのですが、RGB + αチャネル付きが表示できません。 他のブラウザでは表示できてるから書いてるのですが。
少しだけ調べてみると PNG ファイルのヘッダに bKGD chunk ブロックを追加するとうまく表示できるらしいと判りました。 これは必須 chunk では無いので IE のバグでしょう。 ということでパッチ Imaging-1.1.4-PIL-RGBA.patch を作成。これで一応背景色は透けて見えます。
ですが、背景が画像の場合はやはり透過表示になりません。このへんは IE の根本的な設計不良な気がします。 http://www.libpng.org/pub/png/pngapbr.html にいろいろ書いてあるけど深追いはしない。
最後にツールを紹介。 pngcheck は便利です。 PNG 形式 をチェックできます。たとえばこんなふうに、
$ pngcheck -v game2.png File: game2.png (28225 bytes) chunk IHDR at offset 0x0000c, length 13 510 x 354 image, 32-bit RGB+alpha, non-interlaced chunk bKGD at offset 0x00025, length 6: red = 255 green = 255 blue = 255 chunk pHYs at offset 0x00037, length 9: 2835x2835 pixels/meter (72 dpi) chunk tIME at offset 0x0004c, length 7: 4 Mar 2005 02:44:17 GMT chunk IDAT at offset 0x0005f, length 8192 zlib: deflated, 32K window, maximum compression chunk IDAT at offset 0x0206b, length 8192 chunk IDAT at offset 0x04077, length 8192 chunk IDAT at offset 0x06083, length 3498 chunk IEND at offset 0x06e39, length 0 No errors detected in game2.png (96.1% compression).chunk タグを表示できます。