如果我将图像(jpg 或 png)转换为 base64,那么它会更大,还是具有相同的大小?会大多少?
是否建议在我的网站上使用 base64 编码图像?
这是 David Calhoun对何时进行 base64 编码以及何时不进行的非常有用的概述。
基本答案= gzipped base64 编码文件的文件大小与标准二进制文件(jpg/png)大致相当。Gzip 的二进制文件将具有较小的文件大小。
要点= 对 UI 图标等进行编码和 gzip 压缩有一些优势,但对于较大的图像这样做是不明智的。
在base64中它会更大。
Base64 使用每字节 6 位来编码数据,而二进制使用每字节 8 位。此外,Base64 有一点填充开销。并非所有位都与 Base64 一起使用,因为它最初是为了在只能正确处理非二进制数据的系统上对二进制数据进行编码而开发的。
这意味着编码图像将大 33%-36% 左右(33% 来自不使用每字节 2 位,加上可能的填充占剩余的 3%)。
答案是:视情况而定。
尽管 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的图像越大,意义越小。但请考虑以下几点:
将图像编码为 base64 会使其大 30% 左右。
请参阅有关数据 URI 方案的维基百科文章中的详细信息,其中指出:
Base64 编码的数据 URI 的大小比对应的二进制文件大 1/3。(但是,如果 HTTP 服务器使用 gzip 压缩响应,这个开销会减少到 2-3%)
如果您想使用 base64 编码图像,肯定会花费更多空间和带宽。但是,如果您的网站有很多小图像,您可以通过将图像编码为 base64 并将它们放入 html 来减少页面加载时间。通过这种方式,客户端浏览器不需要对图像进行大量连接,而是将它们保存在 html 中。