V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Reign
V2EX  ›  程序员

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

  •  
  •   Reign · Oct 11, 2017 · 3691 views
    This topic created in 3132 days ago, the information mentioned may be changed or developed.

    以下两张图片:

    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 合并后的的图片跟原来图片大小之和一样大,该怎么写这个代码?

    Supplement 1  ·  Oct 11, 2017
    Google 了一个在线工具: http://www.filesmerge.com/merge-jpg,这个工具合并这两个 jpg 后,文件大小刚好是 85kb,这又是为何?
    6 replies    2017-10-12 10:32:50 +08:00
    foru17
        1
    foru17  
       Oct 11, 2017
    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
        2
    qdwang  
       Oct 11, 2017 via iPhone
    因为质量是 1 没有压缩
    原本的两张图片是压缩过的
    Reign
        3
    Reign  
    OP
       Oct 11, 2017
    @foru17 谢谢,既然是“ it around 1.37 X larger ”,为何 296kb/85kb=3.48 ??
    Reign
        4
    Reign  
    OP
       Oct 11, 2017
    @qdwang 跟原始两张图像压缩没压缩有关系吗?
    qdwang
        5
    qdwang  
       Oct 11, 2017 via iPhone
    你搞两张质量 1.0 的 再合并试试看
    ysc3839
        6
    ysc3839  
       Oct 12, 2017 via Android
    这个是很难确定的,跟图像的编码算法有关。
    没记错的话,canvas 保存的是 png 图片,png 是无损压缩,而 jpg 是有损压缩。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1058 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 18:36 · PVG 02:36 · LAX 11:36 · JFK 14:36
    ♥ Do have faith in what you're doing.