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

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

  •  
  •   a132811 ·
    ahuigo · 158 天前 · 3119 次点击
    这是一个创建于 158 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    背景: 我是用 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

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

    29 条回复    2022-07-04 13:40:20 +08:00
    zcf0508
        1
    zcf0508  
       158 天前 via Android   ❤️ 1
    dcsuibian
        2
    dcsuibian  
       158 天前   ❤️ 1
    Squoosh ?
    sommio
        3
    sommio  
       158 天前 via Android   ❤️ 1
    jpeg: imagemagick, graphicsmagick
    webp: google/libwebp
    a132811
        4
    a132811  
    OP
       158 天前
    看起来 Squoosh  可以,离线并提供 api
    kkocdko
        5
    kkocdko  
       158 天前   ❤️ 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  
       158 天前
    可以试试 libvip. python 对应的 binding 应该是 https://github.com/libvips/pyvips
    thedrwu
        7
    thedrwu  
       158 天前 via Android
    pngout ,但是效果不如 tinypng
    littleJohn
        8
    littleJohn  
       158 天前   ❤️ 1
    我一直在用 utool
    abcyuxue123
        9
    abcyuxue123  
       158 天前
    tinypng +1
    ByteCat
        10
    ByteCat  
       158 天前
    Squoosh ,Google 开源的方案,用了很久了感觉还可以
    AItsuki
        11
    AItsuki  
       158 天前
    换一个截图工具?例如 Snipaste ,可以设置截图的质量。
    mikewang
        12
    mikewang  
       158 天前   ❤️ 1
    JPEG 压缩:mozjpeg ,支持无损压缩优化(输入输出均为 JPEG )
    PNG 压缩:pngquant ,使用该技术的有 tinypng.com

    https://squoosh.app 使用 WebAssembly 集成了以上工具,可以在前端完成压缩操作。
    zhuweiyou
        13
    zhuweiyou  
       158 天前
    我在线用 tinypng, 离线用 pngyu
    soraginko
        14
    soraginko  
       158 天前 via Android
    squoosh 超好用
    610915518
        15
    610915518  
       158 天前
    如果对图片质量要求不那么高,png 转成 jpg 更好
    dingdangnao
        16
    dingdangnao  
       158 天前
    只有我一个人在用 pp 鸭么😂 https://ppduck.com
    iyour
        17
    iyour  
       158 天前
    https://www.photofun.cn/compress/,同样采用 squoosh 实现的完全基于本地处理的图片压缩工具
    iyour
        18
    iyour  
       158 天前
    kergee
        19
    kergee  
       158 天前
    PPDUCK
    loginv2
        20
    loginv2  
       157 天前
    Dvel
        21
    Dvel  
       157 天前
    $ brew install webp
    $ cwebp input_file.png -o output_file.webp
    msg7086
        22
    msg7086  
       157 天前
    不同的图片压缩方法是不同的。
    照片类颜色丰富的图片,走图片压缩算法,JPG WEBP HEIC AVIF 等等。
    截图类颜色单一的图片,走调色板压缩算法,比如 PNG8 这样的。
    Serino
        23
    Serino  
       157 天前
    我是用 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  
       157 天前 via iPhone
    用微信发一下就好了,压到你怀疑人生。
    May725
        25
    May725  
       157 天前
    Showfom
        26
    Showfom  
       157 天前
    MLeo
        27
    MLeo  
       157 天前 via iPhone
    iUploader 是一个免费开源的七牛云上传工具,可直接返回上传文件的地址;可以用作图床工具,进行图片的分享,当然不仅仅是图片。

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

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

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

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