SuperAPI AI 工具集

image-compress-skill

设计与创作

查看项目

更新于 10-15 08:33

技能介绍

用途

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。

决策逻辑:

  1. 优先尝试 WebP(默认):对大多数 Web 场景,WebP 提供最佳体积/质量比(可减少 30-90%)。
  2. 回退到 PNG:如果输入是简单图形(低颜色数),或 WebP 生成的体积更大(罕见,但简单形状可能出现),则使用量化 PNG 管线。
  3. 严格质量:如果用户要求“无损”或“无视觉变化”,跳过量化,仅使用 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)、视觉(在浏览器/查看器中打开)。

限制

资料未提供平台支持范围、收费或价格、具体安装环境要求、处理速度基准等信息。