【问题标题】:Uploading base64_encoded image increasing file size from original size上传 base64 编码图像,文件大小从原始大小增加
【发布时间】:2021-01-11 22:38:20
【问题描述】:

我正在使用以下代码将 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

【问题讨论】:

  • 你确定你在这里比较的是同一个文件
  • @RiggsFolly 在看到文件大小的差异后,我反复检查了很多次。
  • 你必须在某处做错了,如果你从一个图像开始并将其转换为 Base64,然后再返回一个图像文件大小不会改变单个字节

标签: php laravel amazon-s3 laravel-5 base64


【解决方案1】:

不幸的是 base64 增加了文件大小。

每个 Base64 位正好代表 6 位数据。因此,输入字符串/二进制文件的三个 8 位字节(3×8 位 = 24 位)可以用四个 6 位 Base64 数字(4×6 = 24 位)表示。

这意味着字符串或文件的 Base64 版本最多为 其来源规模的 133%(增加了约 33%)。涨幅可能是 如果编码数据较小,则较大。例如,字符串“a” 长度 === 1 被编码为 "YQ==" 长度 === 4 — 300% 增加。
来源:https://developer.mozilla.org/en-US/docs/Glossary/Base64


但是,尺寸差异似乎太大了。你能展示一下你是如何编码图像的吗?

【讨论】:

  • 如果您注意到,OP 在存储之前正在执行 base64_DECODE(),因此假设他们已经在其他地方对其进行了编码,这应该是从 base64 版本再次创建图像文件! :)
  • 如果我理解正确,那么是的,他应该向我们展示他是如何编码图像而不是解码的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多