• 请不要在回答技术问题时复制粘贴 AI 生成的内容
a132811
V2EX  ›  程序员

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

  •  
  •   a132811 ·
    ahuigo · Jul 2, 2022 · 8068 views
    This topic created in 1589 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    二年前个人开发的,功能还不是很完善,有些小 bug ,等我买了新电脑,再更新。
    GitHub 上也有源码。
    wolfie
    wolfie
    Jul 4, 2022
    28
    @moult
    微信会可能改你分辨率比例
    jifengg
    jifengg
    Jul 4, 2022
    29
    离线库同推荐 pngquant ,之前对比过好多命令行压缩 png 的,对比下来还是 pngquant 最好。
    他是有损的,是所谓的“视觉无损”,也就是肉眼几乎看不出差异。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   774 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 23:12 · PVG 07:12 · LAX 15:12 · JFK 18:12
    ♥ Do have faith in what you're doing.