php 图片用base64转码完的文本比以前还大 是为什么?

2024-10-31 20:01:46
推荐回答(2个)
回答1:

base64转码会把原有图片的像素数据转成字符数据保存,当需要使用的时候,再把字符数据转化为图片数据显示.
大小问题:
base64是通过文字记录像素方式来保存图片,与原有的二进制保存图片方式并不同,所以不论变大变小都是正常现象.
为何还要使用base64.使用base64保存图片并不是为了节省存储空间,而是为了减少请求.要知道请求耗时且费服务器.如果一个H5页面包含有100张图片,那么用户打开一次,至少要请求100次图片,1次html文件,css文件和js文件都要请求.这么下来,如果1000人同时打开,服务器就瞬间达到了1000*101次100000并发量,无形之中增加了服务器巨大的成本.
而使用base64,把图片数据全部存在一个js文件中,一次请求就2次,一个html文件和一个images.js文件.服务器1000人同时并发也就2000量级.减少服务器压力.
同时,应为只需要请求2个文件,请求时间大大缩短,用户打开速度几乎之和服务器带宽有关系,不用考虑过多的域名解析时间与请求时间.

回答2:

楼上并没有回答文件变大的原因,我来简单说一下吧。    

先说结果:经 base64 编码后的文件大约变大(长) 1/3 。

以下是解释:

base64 编码:用 64 个可打印字符来表示二进制数据(例如图片)的一种编码方案,它能把所有的二进制数据转换成字符串形式保存或显示。这写可打印字符是英文字母、数字和 2 个符号,一共 64 个,编号 0~63。  

0~63 对应的二进制数:000000 ~ 111111 ,即使用 6 位二进制就能表示一个 base64 编码字符。

base64 编码过程:对二进制数据进行处理,每 3 个字节一组,一组就是 3 * 8 = 24 位,再分为 4 组,每组就是 6 位,这样每组就刚好可以用一个 base64 可打印字符来表示,一共 4 组。这样原来的 3 个字节进过编码后会变成 4 个字节。文件大约变大(长) 1/3 。