transparent.gif是37个字节:

data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

GIF89a规格

  • 标头(6个字节)

    由字节" GIF"和版本号组成,通常为89a

  • 逻辑屏幕描述符(7个字节)

    无需赘述,文件的此部分指示以下内容:

    • 该文件的大小为1x1像素。
    • 有一个全局色表。
    • 全局颜色表中有2种颜色,第二种颜色应用作背景颜色。
  • 全局颜色表(6个字节)

    每种颜色包含3个字节,红色,绿色和蓝色分别包含一个字节。在我们的文件中,第一种颜色是白色,第二种颜色是黑色。

  • 图形控件扩展(8字节)

    用于指示应将颜色表中的第二种颜色视为透明(也可以用于动画参数,但不在此文件中)。

  • 图像描述符(10字节)

    一个GIF文件实际上可以在其中包含多个"图像",这使您不必为与背景色相同颜色的图像部分指定图像数据。每个图像块在整个图像尺寸内具有位置和尺寸。在上面的文件中,位置为0,0,大小为1x1。

  • 图像数据(5字节)

    一个LZW编码的图像数据块。它需要5个字节来表示图像中的单个像素。压缩算法的设计并不是很好地压缩单个字节。

  • GIF预告片(1个字节)

    十六进制值为3B;ASCII)的单个字节表示GIF的结尾。

根据透明GIF所需的结构,事实证明43字节几乎可以得到。

但是,我设法找出了一个使它变小的方法。标准中提到拥有全局色表是可选的。当然,当您制作完全没有颜色表的GIF时会发生什么还没有定义。

但是,当将颜色表索引定义为透明时,GIF解码器似乎并不关心实际上没有颜色表。

因此,我更改了逻辑屏幕描述符以指示没有全局颜色表,并删除了该表本身,总共节省了六个字节,使文件大小减小到只有37个字节。

有趣的是,尽管Firefox和GIMP都打开并显示(透明时"显示"?),但Wordpress给了我一则可爱的GD错误消息清单,抱怨这不是有效的GIF文件。正好。

为了使其更小,我查看了图像中最大的剩余"可选"块,即图形控件扩展。如果您不需要透明度,则不再需要此块,而这又是8字节,您可以删除。

资料来源:有史以来最细的GIF