今天看到一个网页使用了background-image:url("data:image/gif;代码,就进行了分析,随后明白了作用是在使用带有背景图像的透明1x1图像,使用数据URI来减少HTTP请求的数量。

Base64 Encode 1x1px透明GIF图片能干什么?这种图片的特征就是体积最小化,最大限度的减少带宽。而且是透明的,具有隐身作用。用到的场景很多,比如测试浏览器是否支持data URI技术,或用来做一个透明的浮动层,或在lazy load图片时用它来做占位符。

作为标准GIF文件(43字节)的GIF 文件结构解析如下:

Header, 6 bytes: 包含 “GIF” 和所采用标准的版本,如 “GIF89a”.

Logical Screen Descriptor, 7 bytes: 包含文件大小、颜色表(color table)等

Global Color Table, 6 bytes: 对应RGB,每3字节表示一个

Graphic Control Extension, 8 bytes: 指明第二类颜色如何处理,如作为透明、动画参数等

Image Descriptor, 10 bytes: 位置和大小信息,对动画型gif,可以包含多帧信息

Image Data, 5 bytes: LZW 压缩算法的图片数据.

GIF Trailer, 1 byte: 文件结束符,3B

下面就是Base64 Encode 1x1px透明GIF图片的data URI数据,有一天你会用到它们。

最小图片的base64使用代码:

<!---黑-->

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=">

 <!---灰--->

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAMLCwgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==">

 <!---透明--->

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">