用途
ImageCompressSkill 是一个为 AI Agent 设计的生产级、Rust 驱动的图像优化引擎,核心能力是在 PNG 量化与 WebP 压缩之间进行智能路由,根据输入内容类型与目标使用场景选择最优压缩策略。
主要能力与智能策略
最优压缩策略取决于输入内容类型与目标用途,资料给出的对应关系如下:
- 照片:主要策略为有损 WebP,工具链为 image -> libwebp,目标格式 .webp。
- 图形 / Logo / UI:主要策略为优化 PNG,工具链为 image -> imagequant -> oxipng,目标格式 .png。
- 通用(Web):WebP(高兼容),工具链为 image -> libwebp,目标格式 .webp。
- 通用(归档):优化 PNG,工具链为 image -> oxipng(无损),目标格式 .png。
决策逻辑:
- 优先尝试 WebP(默认):对大多数 Web 场景,WebP 提供最佳体积/质量比(可减少 30-90%)。
- 回退到 PNG:如果输入是简单图形(低颜色数),或 WebP 生成的体积更大(罕见,但简单形状可能出现),则使用量化 PNG 管线。
- 严格质量:如果用户要求“无损”或“无视觉变化”,跳过量化,仅使用 oxipng(PNG)或无损 WebP。
使用方式
该技能需要 image-compress-tool 二进制文件。若工具未找到,Agent 应运行:
./scripts/install.sh
智能压缩(自动)适用于照片、复杂渐变、Web 资源。
质量参数(-q):
- 80-85:Web 最佳平衡点(视觉上无法区分),默认值。
- 75:更激进,锐利边缘可能出现轻微伪影。
- 90+:归档质量,收益递减。
方法参数(-m):
- 4:默认,平衡良好。
- 6:最慢但压缩最佳,用于静态资源(构建时)。
Rust 用法示例:
// Rust (using webp crate)
let encoder = webp::Encoder::from_image(&img)?;
let memory = encoder.encode(80.0); // Q=80
优化 PNG(通过 imagequant + oxipng)适用于 Logo、图标、截图、线条艺术、透明资源。
第一步:量化(imagequant)
- 质量:min=0,max=80(或 80-90 以获得高保真)。
- 速度:4(默认),1(最慢/最佳)。
- 说明:此步骤将 32 位 RGBA 转换为 8 位索引色,是有损的,但对图形视觉表现出色。
第二步:优化(oxipng)
- 级别(-o):2 为默认,平衡良好;4 推荐用于生产构建(较慢但值得);6 为最大,非常慢。
- Strip(--strip safe):移除元数据。
- Interlace(-i 0):禁用隔行扫描(节省约 20%)。
管线用法示例:
// Pipeline
let (palette, pixels) = imagequant_attributes.quantize(img)?; // Step 1
let png_data = encode_png(palette, pixels);
let optimized = oxipng::optimize_from_memory(&png_data, &options)?; // Step 2
Agent 实现规则
实现图像压缩工具时:
- 双模式支持:始终实现两条管线(WebP 和 PNG)。
- 智能默认值:默认质量 80(WebP 和 ImageQuant 均适用);默认 WebP 方法为 4;默认 Oxipng 级别为 2(若速度不关键则为 4)。
- 输出逻辑:用户要求“压缩此图像”则输出 WebP(最小);用户要求“优化此 PNG”则输出量化 PNG;若输入是小于 10KB 的简单形状,比较 WebP 与 PNG 体积,若 WebP 更大则优先 PNG。
代码资源
依赖设置:
[dependencies]
image = "0.25"
imagequant = "4.4"
oxipng = "10.1"
webp = "0.3"
anyhow = "1.0"
clap = { version = "4.5", features = ["derive"] }
Rust 参考实现(“黄金路径”)见当前项目中的 image-compress-tool/src/main.rs,覆盖:CLI 参数解析、图像加载、WebP 分支(使用 webp crate)、PNG 分支(imagequant -> png 编码 -> oxipng)。
验证
始终验证:文件大小(输出是否小于输入)、格式(是否为有效 WebP/PNG)、视觉(在浏览器/查看器中打开)。
限制
资料未提供平台支持范围、收费或价格、具体安装环境要求、处理速度基准等信息。