最小的数据URI图像可能用于透明图像

我使用透明的1×1图像与背景图像,以便能够使用精灵,并仍为一些图标提供替代文字。

我想为图像使用数据URI来减lessHTTP请求的数量,但是生成透明图像的最小string是多less?

我意识到我可以使用数据URI:s作为实际的图像而不是精灵,但是当所有东西都保存在CSS中而不是分散的时候,它更容易维护。

玩过不同的透明GIF后,有些不稳定,导致CSS故障。 例如,如果你有一个<img> ,你使用最小的透明GIF可能,但是,如果你希望你的透明GIF有一个background-image ,那么这是不可能的。 出于某种原因,一些GIF(如下面的)会阻止CSS背景(在某些浏览器中)。

更短(但不稳定 – 74字节)

 data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== 

我会build议使用稍长,更稳定的版本如下:

⇊稳定⇊(但稍长 – 78字节)

 data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 

作为另一个提示,不要像一个评论所暗示的那样忽略image/gif 。 这将在几个浏览器中打破。

我认为它必须是一个压缩透明的1×1 GIF文件(82字节):

 data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== 

由dopiaza.org数据生成:URI生成器 。

 data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'/%3E 

最后的长度取决于它是用什么来压缩的。

这个人通过GIF规范解决了这个问题。 他的解决schemetransparent.gif将是37个字节:

 data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== 

他通过首先删除透明度,然后颜色表更小…


GIF89a规范

  • 标题 (6字节)

    由字节“GIF”和版本号组成,通常是89a

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

    没有太多的细节,文件的这一部分显示如下:

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

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

  • graphics控制扩展 (8字节)

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

  • 图像描述符 (10字节)

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

  • 图像数据 (5字节)

    一个LZW编码的图像数据块。 它需要5个字节来表示图像中的单个像素。 压缩algorithm不是为了压缩单个字节而devise的。

  • GIF预告片 (1字节)

    一个hex值为3B;在ASCII中)的单个字节表示GIF的结束。

基于透明GIF所需的结构,事实certificate,43个字节非常接近你可以得到的。

但是,我设法找出一个把它做得小一点的技巧。 在标准中提到有一个全局颜色表是可选的。 当然,没有定义颜色表的GIF会发生什么。

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

所以我改变了逻辑屏幕描述符来指示没有全局颜色表,并且删除了表本身,总共节省了6个字节,使得文件大小只有37个字节。

有趣的是,Wordpress给了我一个可爱的GD错误消息列表,抱怨说这不是一个有效的GIF文件,尽pipeFirefox和GIMP都打开并显示(当它是透明的时候“显示”)文件正好。

为了使它更小,我查看了图像中最大的剩余“可选”块,graphics控件扩展。 如果你不需要透明度,这个块就不再需要了,这是你可以带走的另外8个字节。

来源: 有史以来最小的GIF 。

最小的PNG – 114字节:

 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII= 

你可以尝试下面的SVG数据(60字节):

 data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg"/> 

独立的svg文件看起来像(62字节):

 <?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg"/> 

这是我发现的最小的(26字节):

 data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs= 

我正在使用下面的数据uri得到一个空的图像: //:0