IE で GIF 画像が表示できない問題
とあるサイトで FireFox で表示できるのに IE だと表示できない GIF 画像を発見。
解析
giflib を使って GIF ファイルの中を調べてみました。
Screen Infomation: (Width, Height)=(159, 45) ColorResolution=8 BackGroundColor=0 ColorMapObject: ColorCount=128 BitsPerPixel=7 <略> ImageCount=1 # Image No. 0 ImageDesc (Left, Top)=(0, 0) (Width, Height)=(159, 46) Interlace=0
なるほど。 > (2つの Height が 45 と 46 でズレてる)
解説
GIF は初めに Screen として表示サイズ(Width, Height)を設定します。
GIF は複数のイメージデータを含める事が出来て (GIF anime とか)、
各イメージで(Screenのどこに表示するかの) geometry (x,y-width,height)を持ちますが、
これが Screen の枠からはみ出ていると…
この位は許容してくれても良さそうですが、IE は厳しいようです。
修正
修正するプログラムを作ってみました。
以下にようにして、画像ファイル(のスクリーンサイズ)を修正できます。
% gcc -o gif_fixscreen gif_fixscreen.c -lgif % gif_fixscreen old.gif > new.gif
ImageMagick
ちなみに ImageMagick だと以下のように Screen の方が大きなサイズだと言われます。
% identify 414954_160.gif 414954_160.gif GIF 159x46 159x45+0+0 PseudoClass 128c 2.6kb
あれれ…
追記1 (2010/02/01)
ImageMagick の GIFフォーマット解析ルーチンがバグってて
Screen と Page を逆で拾ってるっぽい。うーんw