Back to Blog

6MB 图片变 100KB?我只用了 2 步。

林小卫很行

hero.png 我的写作工作流用 Gemini 生成文章配图,效果不错,但有个头疼的问题:图片太大了,一张动辄 5-6MB。我在 Obsidian 里通过 PicGo 插件自动上传到腾讯云 COS 作为图床,几百张图片积累下来,就是好几个 GB 的存储费用。

更麻烦的是,Gemini 生成的图片还带水印。

第一次尝试:TinyPNG 反复压缩

一开始我用 Raycast 里的 TinyPNG 插件来压缩,但效果不太理想。

第一次压缩能从 6MB 降到 1.5MB,想继续压第二次,只能到 1.2MB,而且画质开始明显变差。

我不理解为什么会这样。于是,我去问了 Perplexity 的 Comet AI。

核心认知:有损压缩的原理

AI 告诉我一个我之前不知道的事实:有损压缩是不可逆的

TinyPNG 这类服务在第一次压缩时,已经删掉了很多「肉眼不太注意」的细节信息。再压一遍的时候,可牺牲的东西已经不多了,所以效果越来越差。

简单来说:第一次是"砍肉",第二次开始就是"刮骨"了,刮多了画面也废了。

砍肉与刮骨-压缩比喻-850.png|400

AI 给我的建议是:想要体积更小,真正该动的是「像素数」而不是反复压缩质量

正确的流程应该是:

  1. 先降尺寸(比如从 4000px 降到 1200px)→ 体积掉一大截
  2. 再压质量(用 TinyPNG 或本地工具)→ 在同尺寸下再挤掉冗余

这样,6MB 的原图就能变成几百 KB,而且肉眼看不出区别。

先降尺寸再压质量-顿悟时刻-850.png|400

第一个方案:PicGo 插件(失败)

明白了原理后,我开始找工具。一开始想用 PicGo 的插件来自动化:压缩、去元数据、重命名一条龙搞定。

但实际测试后发现这个方案走不通。插件配置复杂不说,测试之后甚至出现了反向压缩的现象:图片从 6MB 变成了 7MB。

最终方案:Raycast + API

既然 PicGo 插件不行,我决定用 API 来实现。

经过和 AI 的多轮对话,我发现了一个更好的方案:

  1. 去水印:用硅基流动的图片编辑 API(Qwen-Image-Edit)
  2. 压缩:用 TinyPNG API
  3. 自动化:写一个 Raycast 脚本,选中图片直接触发

关键发现:

  • 硅基流动的 Qwen-Image-Edit API 可以完美去除 AI 生成图片的水印。虽然每张图片收费 0.3 元,但我在硅基流动的免费余额足够使用好几年了。
  • TinyPNG API 每月有 500 次免费额度,对我的使用量来说完全够用。

具体实现

我写了一个 Raycast Script Command。操作很简单:在 Finder 里选中图片,cmd + space 打开 Raycast,输入脚本名称触发,就会自动完成去水印和压缩,保存为 *-clean-850.*

脚本会依次调用两个 API:硅基流动的图片编辑 API(去水印)和 TinyPNG API(压缩到 850×850)。整个过程 1-2 分钟自动完成。

Raycast自动化处理-850.png|400

实际效果

配置完成后,我的工作流程变成了这样:

image.png|400

结果:

  • 体积:6MB → 100KB(压缩率超过 98%)
  • 时间:手动 5 步操作 → 选中图片跑脚本
  • 质量:肉眼看不出区别

如果用 Lovart 这种生成的图片本身没有水印,只需要压缩,我还写了一个「只压缩」的精简版脚本。

总结

这次经历让我再次感受到:万事不决问 AI

如果不是和 AI 对话,我不会知道:

  • 有损压缩的不可逆性
  • 先缩尺寸再压质量的正确流程
  • Raycast 可以这样写脚本来自动化

很多时候,我们不是不会做,而是不知道可以这么做

带着问题去问 AI,AI 就能给出好答案。AI 遇强则强,说的就是这个道理。