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

追記2 (2010/02/01)

JPEG でも IE だけ表示出来ない問題を見つけたので追記。

jpegを保存するときCKYKで保存するとIEでは表示できない

CMYK ?