浏览器如何检测GIF图像大小?

ste*_*bot 14 html browser image http imagemagick

我注意到在FireFox 5和IE 8中使用填充显示了GIF.当我通过FireBug查看图像大小时,我注意到它比预期的大几个像素.

预期高度:160px与实际高度:171px

当我在图像编辑器中打开GIF时,编辑器显示了正确的尺寸,但是当我运行ImageMagick时,我收到了以下信息:

newGif.gif GIF 200x160 200x171+0+5 PseudoClass 256c 30kb 
Run Code Online (Sandbox Code Playgroud)

如果我将几何体修改为200x160 + 0 + 0,则图像显示为我在FireFox中的预期.FireFox和IE 8似乎引用了Image的页面几何而不是尺寸!我的分析是否正确,如果是这样,对所有图像类型或GIF都是如此?

更新后,我已经为您的观看乐趣添加了一张图片!这个图像在FF中显示为200 x 171,但在图形程序中下载和查看时实际上是200 x 160.

这是图像

Iva*_*van 7

此GIF文件的标题与其正文不对应. 在此输入图像描述

图像尺寸存储在第6到第9个字节中,从屏幕截图中可以看到标题中的尺寸为00C8 x 00AB,即200x171,但实际尺寸为200x160

所以这个图像无效.解析无效的GIF没有标准化的行为,这就是为什么会出现这种不一致的原因.

很可能firefox在完全下载之前预先分配图像的位置,当图像被完全下载时,它被放入预分配空间的中心.并且由于预分配空间为200x171,但实际图像为200x160,您将看到边框.

编辑:经过GIF格式参考后,似乎GIF确实允许这样做.所以图像是有效的.所以这里是实际发生的事情:GIF格式由几个块组成.有一个标题块和一个或多个(如果图像是动画的)图像块(也可能有其他块,但它们没有连接问题).标题块包含有关图像的一些信息,包括它的宽度和高度.但是每个图像块也有自己的宽度和高度.那么对于所讨论的图像会发生什么呢?它的主图像尺寸为200x171,而单帧尺寸为200x160.因此,大多数不支持GIF动画的编辑程序和库将提取第一帧并以200x160的大小显示它,支持动画的浏览器和编辑器应以200x171的全尺寸显示它.

PS每个图像块都有图像顶部和图像左侧位置.似乎通过允许帧比画布小,并允许在画布上移动帧的位置,GIF的开发人员试图削减动画gif文件的几个字节.我想知道是否有任何现代图形编辑器利用它......可能不是...... :)

  1. GIF格式字节顺序