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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 图片用base64转码完的文本比以前还大 是为啥?相关的知识,希望对你有一定的参考价值。

我用base64将50张 4.11 MB (4,318,294 字节) 的图片 转码成文本流

转码后的文本大小为5.56 MB (5,831,775 字节)

愿意是网站图片太多 想用后台传64码 前台H5画的方式提速 结果却相反

为什么会比原来还大?

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

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

先说结果:经 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 。

webpack打包小图片时进行Base64转码

关于base64

优点:

  base64就是一串字符串码表示的图片,在加载页面和js时一块加载出来,减少了加载图片时的http请求。加载一张图片时会发起一次http请求,http请求每次建立都会需要一定的时间,对于加载一张小图来说,下载图片所需的时间会比建立http请求的时间要短,

所以对小图进行base64转码是优化http请求,保证页面加速渲染,加快页面加载速度。

缺点:

  base64会增加图片本身的大小,对于小图来说,转码增加的大小导致js加载延时能远远弥补建立http请求的时长。这种取舍是划算的。可是对于大图来说,这样的取舍是不划算的。

以上是关于php 图片用base64转码完的文本比以前还大 是为啥?的主要内容,如果未能解决你的问题,请参考以下文章

uni-app上传头像base64转码

利用base64函数,对文件进行转码加密

PHP如何同时提交base64格式的图片和文本数据给接口

Java对图片Base64转码--HTML对Base64解码

从远程路径读取图片,进行base64转码

java base64位图片转码上传服务器,后台解码,后台保存文件路径不知道怎么写 求教(不是安卓)