php - 上传 base64_encoded 图像从原始大小增加文件大小
问题描述
我正在使用以下代码将 base64 编码图像上传到 s3。
$config = ['Expires' => '30 day','CacheControl' => 'max-age=31536000' ];
$path = 'website/'. $image;
Storage::getDriver()->put($path, base64_decode($b64str), $config);
上传后,我注意到 s3 中的文件与实际文件大小相比具有更大的文件大小。
有什么办法可以上传相同大小的吗?
在这里,我附上了文件实际大小和 s3 大小的屏幕截图。
上传文件大小前的图1
图 2 上传后的文件大小
解决方案
不幸的是,base64增加了文件大小。
每个 Base64 数字正好代表 6 位数据。因此,输入字符串/二进制文件的三个 8 位字节(3×8 位 = 24 位)可以由四个 6 位 Base64 数字(4×6 = 24 位)表示。
这意味着字符串或文件的 Base64 版本最多为其源大小的 133%(增加约 33%)。如果编码数据较小,则增加可能更大。例如,长度 === 1 的字符串“a”被编码为长度 === 4 的“YQ==”——增加了 300%。
来源:https ://developer.mozilla.org/en-US/docs/Glossary/Base64
但是,尺寸差异似乎太大了。你能展示你如何编码图像吗?
推荐阅读
- c# - 为什么我在更改分辨率后在下拉 ui 中得到重复的分辨率值?
- python - 为什么 python 进入循环并占用我 40% 的 CPU?
- python - 选择字典键并将它们放入列表中
- python - 有没有办法从 Tkinter(Entry 函数)获取输入的长度、最后一个字符和最后两个字符?
- c# - 被谴责的一代不是垃圾收集
- python - Python VS Code GoTo 定义在多根工作区中不起作用
- python - 如果第一行是-1,则删除有条件的行
- pascal - 使用 SDL2 从表面/纹理读取像素的 RGBA 值?
- python - 如何使用OpenCV在python中查找图像文件中的两点A和B是否通过直线或曲折线连接?
- javascript - Vue:子字符串道具不会呈现