两张 jpg 图片通过 canvas 合并成一张 jpg 后,为什么文件大小远大于原来两张图片之和?

2017-10-11 18:33:50 +08:00
 Reign

以下两张图片:

https://i.imgur.com/MgbyBoA.jpg ,文件大小:30kb

https://i.imgur.com/mONiRZ7.jpg ,文件大小:55kb

现在通过的 js 来合并这两张图片为一张,代码在 jsfiddle: https://jsfiddle.net/fwsa6r2z/

设置了合并后的图片质量为 1.0,但是为什么合并后的文件大小是 296kb 远大于两张图片大小之和 85kb ? 求好心 V 友解疑释惑一下,如果我想保证 js 合并后的的图片跟原来图片大小之和一样大,该怎么写这个代码?

3296 次点击
所在节点    程序员
6 条回复
foru17
2017-10-11 18:40:01 +08:00
https://stackoverflow.com/questions/9773154/canvas-todataurl-increases-file-size-of-image

the dataURL uses base64 encoding which makes it around 1.37 X larger
each browser processes the toDataURL function differently

https://stackoverflow.com/questions/11402329/base64-encoded-image-size

跟 Base64 编码有关。
qdwang
2017-10-11 18:41:48 +08:00
因为质量是 1 没有压缩
原本的两张图片是压缩过的
Reign
2017-10-11 18:43:33 +08:00
@foru17 谢谢,既然是“ it around 1.37 X larger ”,为何 296kb/85kb=3.48 ??
Reign
2017-10-11 18:43:58 +08:00
@qdwang 跟原始两张图像压缩没压缩有关系吗?
qdwang
2017-10-11 18:47:16 +08:00
你搞两张质量 1.0 的 再合并试试看
ysc3839
2017-10-12 10:32:50 +08:00
这个是很难确定的,跟图像的编码算法有关。
没记错的话,canvas 保存的是 png 图片,png 是无损压缩,而 jpg 是有损压缩。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396864

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX