---
name: image-compressor
description: 图片压缩专用 — 智能自动选择最佳压缩策略、并行处理、支持专业压缩工具。当用户提到压缩图片、优化图片、缩小图片体积、图片太大、节省存储空间、web 上传优化、批量处理图片时使用此 skill。中文触发词：图片压缩、压缩图片、图像优化、图片瘦身、减小图片大小、批量压缩。
version:"1.0.5"
author:jm-jsjkxyjs01-ybx-404
---

# Image Compressor

智能图片批量压缩工具 — 自动识别图片类型，选择最佳压缩策略，并行处理，一键搞定。

## 核心理念

用户只需要告诉我要压缩哪个文件夹，剩下的全部自动完成：
- 自动检测可用的专业压缩工具（pngquant、mozjpeg、cwebp、oxipng）
- 自动识别图片类型（照片/截图/图标/图形）
- 自动为每张图片选择最优压缩方案
- 自动并行处理，榨干 CPU 性能

## 使用方式

### 基础用法 — 一句话搞定

```bash
python "{skill_dir}/compress.py" /path/to/images -r
```

就这么简单。脚本会自动：
1. 递归扫描所有图片
2. 检测可用工具，优先使用专业压缩
3. 分析每张图片特征，选择最佳策略
4. 并行压缩，输出清晰的进度和总结

### 常用选项

```bash
# 更高压缩率（质量 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 的优化设置。

## 给模型的使用指引

当用户请求压缩图片时：

1. **确认文件夹路径** — 如果用户没有明确指定，先确认要压缩哪个文件夹
2. **选择合适的参数** — 根据用户意图：
   - "帮我压缩一下" → 默认参数，`-r -q 80`
   - "尽量压小一点" → `-r -q 60` 或更低
   - "保持画质无损" → `-r --lossless-png`  
   - "先看看有多少图" → `-r --dry-run`
3. **运行脚本** — 始终使用 `{skill_dir}/compress.py`
4. **解释结果** — 告诉用户节省了多少空间，用了哪些策略
5. **如果需要更好的效果** — 建议安装 pngquant 等专业工具

## 注意事项

- **PNG 转 JPEG 会丢失透明** — 带透明的 PNG 默认用 pngquant 保留透明。如果 pngquant 不可用，透明区域会被填白后转 JPEG
- **输出文件夹不要在源文件夹内** — 否则可能重复处理已压缩的文件
- **大文件夹优先用并行** — 默认开启，多核 CPU 可大幅加速
- **质量低于 40 会明显失真** — 除非用户明确要求极限压缩，否则不建议
