在base64中编码图像有什么作用?


94

如果我将图像(jpg或png)转换为base64,它将变大还是具有相同的尺寸?会大多少?

是否建议在我的网站上使用base64编码的图像?


1
您唯一想做的事情是,如果您仅限于纯文本资源,并且由于某种原因而无法使用原始图像格式。
乌格2012年

这里有一个很好的答案:stackoverflow.com/questions/1533113/…–
Steed

base64使得无法进行深层链接。这可能是一个加号。
damoeb 2015年

@Wug-知道这是一个迟到的答复,事情已经发生了变化,但是一定可以通过发送bas64来提高性能。通过websocket发送带有base64编码图像(小图像)的消息,比通过每个请求自己的图像发送消息的性能更高。
菲利普(Philip)

这是一个好问题。我一直在寻找“保存二进制图像还是对base64进行编码?”的好答案。我找到了几个像这样的
moreirapontocom

Answers:


129

大约会大37%:

非常粗略地讲,Base64编码的二进制数据的最终大小等于原始数据大小的1.37倍

资料来源:http//en.wikipedia.org/wiki/Base64


28
不能超过原始大小的137%,是原始大小的137%:-)大37%(根据您的来源)。
Eric J.

4
我要说的是原始大小的4/3。
kiwixz 2014年

将图像转换为base64的图像大小是否有限制?
151291 '16

2
@Blender但是对于我来说,当我将一个70kb的位图转换成字符串时,它变成了500kb。不是37%。我已经将一个5mb的图像压缩到了70kb,然后将该压缩后的图像转换成了500kb的字符串。
KJEjava48

@ KJEjava48:如何将其转换为字符串?
Blender


14

在base64中它将更大。

Base64每字节使用6位来编码数据,而二进制每字节使用8位。另外,Base64的填充开销很小。并非所有位都与Base64一起使用,因为它最初是为在只能正确处理非二进制数据的系统上编码二进制数据而开发的。

这意味着编码的图像将大25%左右,外加用于填充的恒定开销。


7

将图像编码为base64会使它大30%。

请参阅Wikipedia文章中有关Data URI scheme的详细信息,其中指出:

Base64编码的数据URI的大小比其二进制等效文件大1/3。(但是,如果HTTP服务器使用gzip压缩响应,则此开销将减少到2-3%)


7

答案是:这取决于。

尽管base64映像较大,但在某些情况下base64是更好的选择。

base64图像的大小

Base64使用64个不同的字符,这是2 ^ 6。因此base64每8位字符存储6位。因此,从未转换的数据到base64数据的比例是6/8。这不是精确的计算,而是粗略的估计。

例:

一个48kb的图像大约需要64kb作为base64转换的图像。

计算:(48/6)* 8 = 64

Linux系统上的简单CLI计算器:

$ cat /dev/urandom|head -c 48000|base64|wc -c
64843

或使用图片:

$ cat my.png|base64|wc -c

Base64图片和网站

这个问题很难回答。一般而言,使用base64图像越大,感觉越少。但是请考虑以下几点:

  • HTML文件或CSS文件中的许多嵌入式图像可以具有相似的字符串。对于PNG,您经常会发现重复的“ A”字符。使用gzip(有时称为“放气”),甚至可能会赢得尺寸。但这取决于图像内容。
  • HTTP1.1的请求开销:尤其是使用很多Cookie时,每个请求的开销很容易达到几千字节。嵌入base64图像可能会节省带宽。
  • 不要对SVG图像进行base64编码,因为gzip在XML上比在base64上更有效。
  • 编程:在动态生成的图像上,更容易在一个请求中交付它们以协调两个从属请求。
  • 深度链接:如果要防止下载图像,则从HTML页面提取图像会有些棘手。

3

如果要使用base64编码的图像,肯定会花费更多的空间和带宽。但是,如果您的站点上有很多小图像,则可以通过将图像编码为base64并将它们放入html来减少页面加载时间。这样,客户端浏览器将不需要与图像建立大量连接,而是将它们包含在html中。


但是,一旦HTTP 2真正通过,这将不是问题。
菲利普(Philip)

@Philip是的,但是我喜欢将可移植性因素包含在HTML文件中的所有资源。这将有助于在网络参差不齐的区域进行移动Web缓存。
aalaap

@aalaap的问题是,如果您在页面上进行了一次更改,则需要重新加载所有内容,包括图像。如果您将资产分开,则这些资产的使用期限会更高,并且将存储在缓存中,而不在缓存中重新加载会在其自身的页面上过期。
菲利普(Philip)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.