Image Compressor
智能图片批量压缩工具 — 自动识别图片类型,选择最佳压缩策略,并行处理,一键搞定。
核心理念
用户只需要告诉我要压缩哪个文件夹,剩下的全部自动完成:
- 自动检测可用的专业压缩工具(pngquant、mozjpeg、cwebp、oxipng)
- 自动识别图片类型(照片/截图/图标/图形)
- 自动为每张图片选择最优压缩方案
- 自动并行处理,榨干 CPU 性能
使用方式
基础用法 — 一句话搞定
python "{skill_dir}/compress.py" /path/to/images -r
就这么简单。脚本会自动:
1. 递归扫描所有图片
2. 检测可用工具,优先使用专业压缩
3. 分析每张图片特征,选择最佳策略
4. 并行压缩,输出清晰的进度和总结
常用选项
# 更高压缩率(质量 65)
python "{skill_dir}/compress.py" /path/to/images -r -q 65
# 输出到单独的文件夹(保留子目录结构)
python "{skill_dir}/compress.py" /path/to/images -r -o /path/to/output
# 预览模式 — 只列出会怎么处理,不实际压缩
python "{skill_dir}/compress.py" /path/to/images -r --dry-run
# 覆盖原文件(谨慎使用!)
python "{skill_dir}/compress.py" /path/to/images -r --overwrite
# PNG 保持无损(不转 JPEG,不做有损量化)
python "{skill_dir}/compress.py" /path/to/images -r --lossless-png
# 压缩后验证质量(需要 numpy)
python "{skill_dir}/compress.py" /path/to/images -r --check-quality
全部参数
| 参数 | 默认值 | 说明 |
|---|---|---|
-q, --quality |
80 |
压缩质量 1-100,数值越高质量越好 |
-s, --suffix |
_compressed |
输出文件名后缀 |
-r, --recursive |
关 | 递归处理子文件夹 |
-f, --formats |
jpg,jpeg,png,webp,bmp,tiff |
要处理的格式 |
--overwrite |
关 | 覆盖原文件 |
--lossless-png |
关 | PNG 保持无损优化 |
--dry-run |
关 | 只预览,不压缩 |
--check-quality |
关 | 计算 PSNR 质量指标 |
-o, --output-dir |
同目录 | 输出到指定目录 |
--no-parallel |
关 | 禁用并行处理 |
压缩策略详解
脚本根据图片特征自动选择策略:
| 图片类型 | 特征 | 首选策略 | 效果 |
|---|---|---|---|
| 照片 | 大尺寸、颜色丰富 | mozjpeg / JPEG Pillow | 通常缩小 70-90% |
| 截图 | 中等尺寸、中等颜色 | pngquant → PNG 8位 | 通常缩小 60-80% |
| 图标 | 小尺寸、少颜色 | PNG 无损优化 | 通常缩小 20-50% |
| 带透明图 | 含 Alpha 通道 | pngquant / PNG 量化 | 保留透明,缩小 50-70% |
专业工具带来的提升
| 工具 | 对比基准 | 额外压缩收益 | 安装方式 |
|---|---|---|---|
| pngquant | Pillow PNG | 60-80% 更小 | winget install pngquant |
| mozjpeg | Pillow JPEG | 10-15% 更小 | 下载 mozjpeg 二进制 |
| cwebp | Pillow WebP | 5-10% 更小 | brew install webp |
| oxipng | 无后处理 | 额外 5-15% | winget install oxipng |
没有这些工具也能正常使用 — 脚本会自动回退到 Pillow 的优化设置。
给模型的使用指引
当用户请求压缩图片时:
- 确认文件夹路径 — 如果用户没有明确指定,先确认要压缩哪个文件夹
- 选择合适的参数 — 根据用户意图:
- "帮我压缩一下" → 默认参数,-r -q 80
- "尽量压小一点" →-r -q 60或更低
- "保持画质无损" →-r --lossless-png
- "先看看有多少图" →-r --dry-run - 运行脚本 — 始终使用
{skill_dir}/compress.py - 解释结果 — 告诉用户节省了多少空间,用了哪些策略
- 如果需要更好的效果 — 建议安装 pngquant 等专业工具
注意事项
- PNG 转 JPEG 会丢失透明 — 带透明的 PNG 默认用 pngquant 保留透明。如果 pngquant 不可用,透明区域会被填白后转 JPEG
- 输出文件夹不要在源文件夹内 — 否则可能重复处理已压缩的文件
- 大文件夹优先用并行 — 默认开启,多核 CPU 可大幅加速
- 质量低于 40 会明显失真 — 除非用户明确要求极限压缩,否则不建议