最小的数据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