abelyao
V2EX  ›  问与答

有什么 JPG 压缩库 可以达到接近 TinyPNG 的效果

  •  
  •   abelyao · Mar 22, 2021 · 4324 views
    This topic created in 1882 days ago, the information mentioned may be changed or developed.
    一张 23.8M 的照片,通过 TinyPNG 可以压缩到 2M,但 Tinify API 限制每月 500 次免费,限制手头上有将近 20000 张图要处理。

    试过 node.js 的几个库,包括:
    - sharp
    - imagemin + jpegtran
    - imagemin + mozjpeg

    如果指定输出质量在 100 则顶多就比原图小 1-2M,和 TinyPNG 对比还是差异巨大。虽然不知道 TinyPNG 压缩后的 jpg 质量是多少,但肉眼看的差距极其细微。

    各位大佬有没有什么压缩 jpg 的库推荐一下,node.js / php / c-sharp 的都可以,或者桌面软件也行。

    最好最好,希望是大佬亲自使用过、对比过的,非常感谢!
    29 replies    2021-03-23 11:10:58 +08:00
    66beta
        1
    66beta  
       Mar 22, 2021
    jpg 压缩损失巨大
    参考同类问题: https://www.v2ex.com/t/508416

    photoshop 的批处理考虑一下,质量选 70 感觉是极限了
    alexkkaa
        2
    alexkkaa  
       Mar 22, 2021 via Android
    输出质量在 100, 你这个要求体积没办法缩啊。
    abelyao
        3
    abelyao  
    OP
       Mar 22, 2021
    @alexkkaa @66beta

    就如我在主贴说的,我不确定 TinyPNG 给的图片质量是多少,但无论我设置多少输出质量,要么比 TinyPNG 的结果大很多、要么比它失真很多。

    换而言之,如果我选定一个肉眼上看起来跟 TinyPNG 结果差不多的质量,那图片体积可能是 TinyPNG 的三五倍;而如果选一个体积差不多的质量,则肉眼可见的失真非常大。

    所以很头疼…
    66beta
        4
    66beta  
       Mar 22, 2021
    @abelyao PNG 损失少很多,你现在是 jpg,就很难了
    youthfire
        5
    youthfire  
       Mar 22, 2021
    有没有试过 ImageOptim,质量控制在 90%或者 80%?
    lonewolfakela
        6
    lonewolfakela  
       Mar 22, 2021
    先确认一个问题:当你说“TinyPNG”的时候,你是不是其实想指的是 tinypng 网站上提供的 jpg 压缩功能而不是 png 压缩功能,或者换句话说,你想要的(以及在题目里作为对比的)其实是 TinyJPG ?
    dawangyezi
        7
    dawangyezi  
       Mar 22, 2021
    从文件格式角度比较好解释这个问题:

    * jpg 是基于整个图像中的区块使用压缩算法压缩后保存的。
    * png 文件标准中有多种格式
    o 调色板模式。文件头保存一个颜色表,然后保存每个像素的时候只存储颜色表索引
    o 灰度图模式,如果你的图像是灰度的(有亮度的黑白),只需要保存每个像素点的亮度。
    o 二值模式。假设你的图像只有黑和白,比如曲谱。那你可以用 1 个 bit 位保存一个像素点。
    o 全彩模式,和 jpg 相同。
    o 动图

    因为日常使用的 png 大多是全彩模式的。tinyPNG 后端应使用的 pngquant 命令行工具或者相同的算法,将全彩模式的 png 图转换成调色板模式。这样,就可以通过减少颜色数量来达到降低质量,压缩图片的目的。

    如果你确实有批量压缩质量的需求,可以先用工具批量转换成 png 再压缩图像质量。
    批量处理图像可以用 imgmagic 工具组
    lonewolfakela
        8
    lonewolfakela  
       Mar 22, 2021
    @zhangyufei49 虽然楼主说的是 TinyPNG,但是我严重怀疑他一直就是指的是 TinyJPG,因为他说了什么“TinyPNG 压缩后的 jpg 质量”之类的。所以整个帖子的问题和 PNG 其实没啥关系,就是想找个好点的 JPEG 优化编码工具
    wdy3334
        9
    wdy3334  
       Mar 22, 2021
    TinyPNG 有 ps 插件版吧 那个没有限制次数吧
    dawangyezi
        10
    dawangyezi  
       Mar 22, 2021
    再补充几个实用的说明:

    1. 怎么选择用 png 还是 jpg
    如果有透明通道,就用 png 。没有透明通道,图片中的颜色又很多,比如拍摄的大自然风景,用 jpg 。

    2. 怎么选择 png 模式

    颜色数量很少,有大面积的色块。比如动漫卡通,用调色板模式。
    黑白照片,用灰度模式。
    用作游戏动画中的遮照层,或者黑白曲谱(不需要抗锯齿),AI 轮廓识别,用二值图。
    全彩模式适用日常图片。尤其在游戏和 app 资源中适用。
    abelyao
        11
    abelyao  
    OP
       Mar 22, 2021 via iPhone
    @lonewolfakela

    其实我用的是 Tinify 这个域名的接口,因为 TinyPNG / TinyJPG 在线版限制最大图片体积为 5M 。

    TinyPNG 和 TinyJPG 都是他们的品牌而已,实际不管通过哪个入口,都能压缩 jpg 图片,这里仅寻求 jpg 图片的压缩方案。
    abelyao
        12
    abelyao  
    OP
       Mar 22, 2021 via iPhone
    @youthfire

    试过的,在 ImageOptim 的选项界面可以看到,它在处理 jpg 时,也是用的我在主帖提到的两个插件,结果一样。
    abelyao
        13
    abelyao  
    OP
       Mar 22, 2021 via iPhone
    @wdy3334

    谢谢回复复。我希望优先寻找能集成在程序中的办法,因为还有其它自动化流程要做。

    另外我也不确定那个 PS 插件是不是联网处理的,如果是联网处理,上万张图上传再下载,也不是很优雅…
    love
        14
    love  
       Mar 22, 2021
    mozjpeg 为何要指定质量为 100 ??就不能指定到你能看出区别的分界点看看和 tinypng 大小差多少? tinypng 绝对不可能是 100
    dawangyezi
        15
    dawangyezi  
       Mar 22, 2021
    @lonewolfakela 了解了, 那可以用这个: https://www.picdiet.com/zh-cn
    dawangyezi
        16
    dawangyezi  
       Mar 22, 2021
    @zhangyufei49 tinypng 压缩后的质量不是 100,放到到一定倍数就能看出来和原图的差异。你用的 imagemin + mozjpeg 就挺好,
    dawangyezi
        17
    dawangyezi  
       Mar 22, 2021
    @abelyao 可以用 imgemin + mozjpeg 这个方案。我对比了 tinypng 输出的颜色数量,你可以把质量调整到 65 - 70 之间
    superrichman
        18
    superrichman  
       Mar 22, 2021 via iPhone
    irfanview 转图片,里面能转各种格式,还有一堆参数,自己去折腾看哪个组合合适。
    abelyao
        19
    abelyao  
    OP
       Mar 22, 2021 via iPhone
    @love 看我在 #3 的回复
    oott123
        20
    oott123  
       Mar 22, 2021 via Android
    love
        21
    love  
       Mar 22, 2021
    @abelyao 那就无法了。如果是自用的话可以试试新一代的图象格式如 avif
    mon6912640
        22
    mon6912640  
       Mar 22, 2021 via Android
    一个账号每个月 500 次,当时我的做法是申请了十几个账号,把账号丢库里轮询执行
    duola
        23
    duola  
       Mar 22, 2021
    难道用谷歌的压缩不好用? https://squoosh.app/
    mon6912640
        24
    mon6912640  
       Mar 22, 2021   ❤️ 1
    两年前的代码,不知道现在还能不能执行,把申请的 key 往代码里面的一个数组变量丢就是了,只要我申请足够多的 key,就能白嫖到底
    https://github.com/mon6912640/TinyPngTool
    Hansah
        25
    Hansah  
       Mar 22, 2021 via Android
    riot win 下的软件,可以批量处理
    abelyao
        26
    abelyao  
    OP
       Mar 23, 2021
    @mon6912640 同个 IP 地址用几十个 key 轮番上不会触发什么屏蔽吗,稳定的话我也想试试了…
    ByteCat
        27
    ByteCat  
       Mar 23, 2021
    https://squoosh.app/
    Google 开源项目可以看看?
    abelyao
        28
    abelyao  
    OP
       Mar 23, 2021
    @ByteCat @duola

    从官网的在线版看,本质也是 MozJPEG
    xingshu1990
        29
    xingshu1990  
       Mar 23, 2021
    @abelyao #26 数量大的时候,上阿布云买 1 个小时的 IPdaili,IP 循环+上面帐号轮询。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5878 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 01:40 · PVG 09:40 · LAX 18:40 · JFK 21:40
    ♥ Do have faith in what you're doing.