← 返回全部沉淀
Local Image Compression Skill

PNG Compress

把 TinyPNG 同类的公开压缩路线,做成能在工程里持续运行、压坏自动回退的本地能力。

Local compression chamber 本地处理 · 图片不上传
原图
24 / 32 bit 真彩色 PNG
01pngquant颜色量化
02oxipng无损收尾
03quality gate质量门禁
候选图
8 bit palette 等待质量门禁
可解码 宽高不变 alpha 保留 质量指标 体积更小
当前策略 quality 65-85 · speed 1 · dithering 1.0

几张图可以上传,
整个工程不能靠手点。

包体积治理需要一次处理几万张 PNG,后面还会不断新增资源。 在线工具效果不错,但上传、额度、隐私和重复执行都会进入主链路。

素材规模一次覆盖整个资源目录
持续增量今天压完,明天还有新图
本地边界项目图片不需要离开机器
真正目标一条能反复跑的工程流水线
起点 TinyPNG 的效果值得研究

先查它公开讲了什么,再找同类开源实现和可复用参数。

几个小时后 AI 把研究结果落成了 Skill

组合工具、补脚本、加缓存、写回退,再用测试和真实素材验证。

边界 没有复刻 TinyPNG 的未公开算法

它采用同类公开技术路线,并补齐了工程里真正缺失的部分。

省大头的是颜色,
省小头的是编码。

TinyPNG 公开说明会合并相近颜色、转成更小的索引色,并清理元数据。 `pngquant` 作者也把 TinyPNG 等服务列为同类量化方案的应用。

INPUT 24 / 32 bit PNG

真彩色、透明通道、原始编码和元数据。

pngquant 24 / 32 bit → 8 bit 调色板

改进的颜色量化、感知权重、自适应抖动和 alpha / gamma 处理。

有损 · 主要收益
oxipng filter + DEFLATE + strip

重新选择滤波方式、重压编码并清理非必要元数据。

无损 · 继续收紧
OUTPUT 候选 PNG

先过门禁,再决定覆盖还是回退。

公开证据

公开对比表明,默认参数下 TinyPNG 往往更小;调整 `pngquant` 的质量参数后, 本地方案可以追平或反超测试集。素材、参数和验证方式共同决定结果。

每张图片都要单独决定,
覆盖还是回退。

切换下面四类素材,可以看到参数、门禁和最终动作怎样变化。 Skill 既要压得小,也要知道什么时候应该停手。

STANDARD PNG

量化颜色,再做无损收尾

普通图使用 65-85 质量区间,主要体积由 pngquant 降下来。

参数
quality 65-85 · speed 1 · dithering 1.0
门禁
解码 · 尺寸 · alpha · PSNR / SSIM / MAE · 更小
动作
通过后原地覆盖,最终 hash 写入缓存
hero-3x.png
pngquant oxipng quality gates
PASS 候选图更小且质量门禁通过

覆盖原图,缓存最终文件内容。

压缩算法公开,
可靠地反复运行并不天然成立。

工程化首先要补齐边界:哪些目录不能碰,哪些图片不能压, 哪些结果不能覆盖,以及下一次怎么只处理新增和变化。

内容 hash

压过的图片不再压第二次

缓存记录最终文件内容。新增或改动的图片继续处理,未变化的文件直接跳过。

变大回退

候选图没有更小,就保留原图

小 icon 本来就很紧,强行量化可能变大。结果必须比原图小,才允许覆盖。

硬门禁

解码、尺寸和 alpha 先过关

候选图打不开、宽高变化、透明通道丢失或动画帧数变化,立即回退。

质量门禁

白底黑底都看,避免透明图漏判

PSNR、SSIM、MAE 和 alpha MAE 同时检查,只拦明显坏图,不替代最终肉眼验收。

动图保护

APNG 不进入有损量化

检测到 acTL 动画块直接跳过,避免一张动图被压成静态首帧。

并行执行

几万张资源可以持续跑

目录递归和多进程并行补上网页工具缺少的批处理能力。

先拿自己的公开素材跑,
再谈“效果怎么样”。

下面是本网站公开目录的一次 `--dry-run`。它只证明这条流水线在这批素材上的真实输出, 不代表所有项目都能得到同样比例。

DRY RUN · PUBLIC CORPUS ./compress.sh public --dry-run -j 4

运行前后对 23 张原图做 SHA-256 对照,确认 dry-run 没有改动任何文件。

PNG23张公开素材
BEFORE30.1MB
AFTER8.1MB 候选结果
SAVED73.0%本批素材
23 张进入压缩 0 张硬门禁回退 0 张质量门禁回退 0 个失败 原图 hash 全部不变 耗时 23.0 秒
这个案例真正说明什么 AI 没有重新发明压缩算法。它把公开知识快速查明、组合、调参,再补成一条有缓存、有门禁、有回退的工程链路。

适合什么

  • App 包体积治理中的 PNG 批量压缩
  • 一次需要处理几万张图片的工程
  • 图片不能上传到第三方服务的本地处理场景
  • 需要持续处理新增资源,并避免重复有损压缩的团队工作流

它只接收一个目录,不读取 Xcode 工程、Scheme、Bundle ID 或业务源码。默认跳过依赖目录和构建产物,因此也能用于其他 App 工程或独立图片目录。

安装

git clone https://github.com/Job-Yang/jobbyang-ai-skills.git
cp -R jobbyang-ai-skills/skills/png-compress-skill ~/.claude/skills/png-compress-skill

装好后,直接告诉 Agent:

帮我压一下这个 App 工程里的 PNG:/path/to/MyApp

建议先用 --dry-run 估算收益。正式执行会原地替换通过门禁的 PNG,并在目标目录写入内容 hash 缓存。

边界

这是有损压缩。自动门禁可以拦住无法解码、尺寸变化、alpha 丢失和明显劣化,但不能替代全部主观视觉验收。

AppIcon、启动图、大面积渐变、半透明阴影,以及带 ICC 或 Display P3 色彩配置的素材,仍应在真实设备上抽检。APNG 会直接跳过,避免动画被压成单帧。

这套实现沿用 TinyPNG 公开描述中的同类技术路线,不声称复刻它的未公开算法。不同素材差异很大,最终效果应以项目自己的 A/B 结果为准。

100%