V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a132811
V2EX  ›  程序员

压缩图片文件大小有什么好的方案?

  •  
  •   a132811 ·
    ahuigo · 2022-07-02 19:50:50 +08:00 · 5077 次点击
    这是一个创建于 608 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想寻找一款压缩图片大小的库。

    背景: 我是用 vscode 中使用 paste image 给自己的 markdown 插入截图,大部分是 png 图,有些比较大需要压缩一下。

    我谷歌搜索了一些压缩图片的方法:

    1. 使用 python 的 PIL.Image 自带的pic.save("a.png",optimize=True,quality=80)压缩, 35K 能到 27K ,压缩效率不太高( png quality 再降低不会有影响了)
    2. 改用 webp 格式:
      1. p.save('a.png.webp', 'webp', optimize = True, quality = 88)35K 压缩到 15K, 质量刚好能接受,不过体积希望尽可能小
      2. p.save('a.png.webp', 'webp', optimize = True, quality = 50)到 8k  图片质量有点糊了,不理想。
    3. 使用在线的 tinypng 压缩,输出格式 png ,压缩到了 8K ,质量非常好,没有失真
      1. 看了输出的格式,发现 tinypng 是把8-bit/color RGBA 转成了 8-bit colormap
      2. tinypng 提供 api 实现压缩,每月有免费额度,还是挺不错的
      3. 不过我的需求还是离线用,我找到一篇 colormap 文章,自己实现看起来要花很多时间 https://towardsdatascience.com/simple-steps-to-create-custom-colormaps-in-python-f21482778aa2

    有更好的离线方案、库吗?

    30 条回复    2024-02-21 14:43:28 +08:00
    zcf0508
        1
    zcf0508  
       2022-07-02 19:53:46 +08:00 via Android   ❤️ 1
    dcsuibian
        2
    dcsuibian  
       2022-07-02 19:55:15 +08:00   ❤️ 1
    Squoosh ?
    sommio
        3
    sommio  
       2022-07-02 20:05:21 +08:00 via Android   ❤️ 1
    jpeg: imagemagick, graphicsmagick
    webp: google/libwebp
    a132811
        4
    a132811  
    OP
       2022-07-02 20:17:11 +08:00
    看起来 Squoosh  可以,离线并提供 api
    kkocdko
        5
    kkocdko  
       2022-07-02 20:53:48 +08:00   ❤️ 1
    我的方案是,先使用 pngquant 有损压缩(优化色板),再使用 cwebp 无损压缩为 webp 图片。
    成品如图: https://kkocdko.site/res/20210612-0010-001.webp ,按下 F12 可以看到图片体积。
    上边提到的工具:
    https://github.com/kornelski/pngquant
    https://chromium.googlesource.com/webm/libwebp
    foam
        6
    foam  
       2022-07-02 23:15:57 +08:00
    可以试试 libvip. python 对应的 binding 应该是 https://github.com/libvips/pyvips
    thedrwu
        7
    thedrwu  
       2022-07-02 23:31:42 +08:00 via Android
    pngout ,但是效果不如 tinypng
    littleJohn
        8
    littleJohn  
       2022-07-02 23:39:55 +08:00   ❤️ 1
    我一直在用 utool
    abcyuxue123
        9
    abcyuxue123  
       2022-07-02 23:41:29 +08:00
    tinypng +1
    ByteCat
        10
    ByteCat  
       2022-07-03 00:17:20 +08:00
    Squoosh ,Google 开源的方案,用了很久了感觉还可以
    AItsuki
        11
    AItsuki  
       2022-07-03 01:09:35 +08:00
    换一个截图工具?例如 Snipaste ,可以设置截图的质量。
    mikewang
        12
    mikewang  
       2022-07-03 01:12:56 +08:00   ❤️ 1
    JPEG 压缩:mozjpeg ,支持无损压缩优化(输入输出均为 JPEG )
    PNG 压缩:pngquant ,使用该技术的有 tinypng.com

    https://squoosh.app 使用 WebAssembly 集成了以上工具,可以在前端完成压缩操作。
    zhuweiyou
        13
    zhuweiyou  
       2022-07-03 07:42:10 +08:00
    我在线用 tinypng, 离线用 pngyu
    soraginko
        14
    soraginko  
       2022-07-03 07:54:51 +08:00 via Android
    squoosh 超好用
    610915518
        15
    610915518  
       2022-07-03 10:01:54 +08:00
    如果对图片质量要求不那么高,png 转成 jpg 更好
    dingdangnao
        16
    dingdangnao  
       2022-07-03 11:49:20 +08:00
    只有我一个人在用 pp 鸭么😂 https://ppduck.com
    iyour
        17
    iyour  
       2022-07-03 11:50:52 +08:00
    https://www.photofun.cn/compress/,同样采用 squoosh 实现的完全基于本地处理的图片压缩工具
    iyour
        18
    iyour  
       2022-07-03 11:51:41 +08:00
    kergee
        19
    kergee  
       2022-07-03 12:43:19 +08:00
    PPDUCK
    loginv2
        20
    loginv2  
       2022-07-03 14:18:27 +08:00
    Dvel
        21
    Dvel  
       2022-07-03 15:19:29 +08:00
    $ brew install webp
    $ cwebp input_file.png -o output_file.webp
    msg7086
        22
    msg7086  
       2022-07-03 15:42:58 +08:00
    不同的图片压缩方法是不同的。
    照片类颜色丰富的图片,走图片压缩算法,JPG WEBP HEIC AVIF 等等。
    截图类颜色单一的图片,走调色板压缩算法,比如 PNG8 这样的。
    Serino
        23
    Serino  
       2022-07-03 16:07:12 +08:00
    我是用 Pinga 这个软件 png 压 webp ,选 lossy ,默认 80%的质量,最高压缩率

    不知道为何 Pinga 压出来的 webp 图片质量比 Pillow 、OpenCV 或者 webp2jpg 要好,
    用 Pillow 、OpenCV 或者 webp2jpg 转 jpg 或者 png 成 webp ,会丢失很多细节,
    而 Pinga 选 lossy 和默认的 80%质量,压出来得 webp 和选无损压缩几乎没差,放大图片仔细看,噪点细节都还在,但图片大小要小很多

    可惜这个软件不支持 jpg 直接转 webp ,我只能写了个 Python 脚本用 OpenCV ,先 jpg 无损转 png ,再转 webp
    moult
        24
    moult  
       2022-07-03 16:35:16 +08:00 via iPhone
    用微信发一下就好了,压到你怀疑人生。
    May725
        25
    May725  
       2022-07-03 19:42:14 +08:00
    Showfom
        26
    Showfom  
       2022-07-04 00:11:22 +08:00
    MLeo
        27
    MLeo  
       2022-07-04 05:34:14 +08:00 via iPhone
    iUploader 是一个免费开源的七牛云上传工具,可直接返回上传文件的地址;可以用作图床工具,进行图片的分享,当然不仅仅是图片。

    软件介绍:
    iUploader 主要功能将文件上传至七牛云,返回 Markdown 格式的链接到剪贴板

    **引入 pngquant , 提高 png 图片的压缩比,减少流量的损失,快速完成图片的加载**

    https://ichochy.com/posts/20190822.html

    二年前个人开发的,功能还不是很完善,有些小 bug ,等我买了新电脑,再更新。
    GitHub 上也有源码。
    wolfie
        28
    wolfie  
       2022-07-04 11:54:28 +08:00
    @moult
    微信会可能改你分辨率比例
    jifengg
        29
    jifengg  
       2022-07-04 13:40:20 +08:00
    离线库同推荐 pngquant ,之前对比过好多命令行压缩 png 的,对比下来还是 pngquant 最好。
    他是有损的,是所谓的“视觉无损”,也就是肉眼几乎看不出差异。
    ArvinLiu
        30
    ArvinLiu  
       10 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2502 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:53 · PVG 18:53 · LAX 02:53 · JFK 05:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.