用途
lov-png2svg 用于将 PNG 图片转换为高质量矢量 SVG,并支持去除白色背景。当用户需要把 PNG 转为 SVG 时使用该技能。
主要能力
工具链为:PNG → magick(去白底 + alpha 阈值)→ vtracer(样条曲线)→ svgo(压缩)→ SVG。
- ImageMagick(magick):去除白色背景并进行 alpha 阈值处理。
- vtracer:样条曲线矢量化,资料称其比 potrace 更平滑。
- svgo:SVG 路径压缩优化。
使用方式
调用参数:
- INPUT_PNG:输入 PNG 文件路径(必需)。
- OUTPUT_SVG:输出 SVG 路径(默认:同名 .svg)。
- KEEP_BG:是否保留背景(默认:false,去除白色背景)。
执行步骤:
Step 1:预处理(去白底)。当 KEEP_BG=false 时执行:
magick INPUT_PNG \
-fuzz 15% -transparent white \
-channel A -threshold 50% +channel \
INPUT_PNG.temp.png
Step 2:矢量化:
vtracer --input INPUT_PNG.temp.png --output OUTPUT_SVG \
--mode spline \
--filter_speckle 8 \
--color_precision 8 \
--corner_threshold 120 \
--segment_length 6 \
--path_precision 5
Step 3:压缩优化:
npx svgo OUTPUT_SVG -o OUTPUT_SVG --multipass
Step 4:清理:
rm -f INPUT_PNG.temp.png
输出:返回生成的 SVG 文件路径,并报告文件大小,格式示例:
✓ PNG → SVG 转换完成
输入: {INPUT_PNG}
输出: {OUTPUT_SVG}
大小: {file_size}
依赖安装
首次使用前确保已安装:
brew install imagemagick
cargo install vtracer
npm install -g svgo # 或使用 npx
参数调优
资料提供的参数说明为:
- filter_speckle:过滤小斑点,调大后更干净。
- corner_threshold:角点阈值,调大后更平滑。
- segment_length:线段长度,调大后更平滑。
- color_precision:颜色精度,调大后更准确。
运行上下文与反馈规则
运行前读取本 Skill 包的 skill.yaml,由宿主提供 skill-runtime/v1 上下文。字段解析顺序为:当前请求、项目上下文、个人 Preferences、品牌 Profile、通用默认值。只使用 Manifest 声明的字段;Profile 保存公开品牌事实,Preferences 保存个人工作偏好。required: true 字段缺失时,按 Manifest 的问题配置向用户提出一个聚焦问题;用户明确同意后再保存回答。报错提供可复制的 context_id、字段路径与来源,诊断内容避开秘密、完整私人路径和原始配置。
通用反馈闭环:用户在 Skill 驱动任务中提出修改意见时,继续当前产物前必须先判断意见是 task-specific(仅本次)还是 reusable(可跨任务复用)。task-specific 只修改当前任务,不改 Skill。reusable 先确定作用域:领域规则先更新对应 canonical Skill;适用于所有 Skill 的规则先更新共享规范。完成规则更新、版本、lint 与分发核验后,再把修改应用到当前任务。reusable 修改会使此前的“确认”“继续”“发吧”失效;完成当前产物修改和回读后必须停下,等待用户下一步指示,不自动进入发布、提交或其他外部写入。
适用场景与限制
适用于需要将 PNG 位图转换为可缩放 SVG 矢量图,尤其是需要去除白色背景并期望较平滑样条曲线的场景。限制方面:依赖 ImageMagick、vtracer 与 svgo 三套外部工具,需先行安装;KEEP_BG 默认去除白色背景,若需保留背景需显式设置;资料未提供除上述参数外的更多配置项、支持平台范围或性能数据,暂未提供。