Community图像github.com

图片转矢量

将参考图像(如logo、图标、角色、吉祥物或徽章)转化为精确匹配的SVG矢量图,进行样式重设计(扁平图标、柔和3D、电影级金属、换色版),并可选择添加动画(静止、思考、说话唇形同步、暂停)。通过像素追踪而非目测绘制,用叠加图验证匹配度,并通过预览变体获得设计批准后再进行构建。

图片转矢量 是什么?

该技能旨在将用户提供的参考图像(如logo、图标、角色或吉祥物)转化为高质量、精确匹配的SVG矢量图,并支持多种样式重设计和动画。其核心工作流程包括:首先通过像素级颜色追踪提取图像的精确几何轮廓,而非人工估测坐标,从而避免了形状偏差问题;然后生成多个风格变体(扁平图标、柔和3D、电影级金属)供用户选择,并在每个阶段提供预览图以确保设计方向正确;最后可添加基于CSS和SMIL的动画(如呼吸、思考、唇形同步)。技能依赖Python脚本(Pillow、NumPy、scikit-image)进行图像处理,使用Node.js进行对比和生成,支持Claude Code、Cursor等平台。关键原则包括:始终用叠加图证明追踪结果与参考图匹配,以及在设计集成到项目之前先获得用户批准,从而降低返工成本。该技能非常适合需要根据现有图片创建精确矢量图形、图标、吉祥物或动画的场景。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SimsonCorreya/skills/tree/HEAD/image-to-vector

Installed? Explore more 图像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

图片转矢量 是做什么的?

将参考图像转化为精确匹配的SVG,再转化为用户要求的风格化(以及,如果用户需要,动画化)艺术作品。

在下面的命令中,<skill> 是此技能文件夹的路径,即包含本文件的文件夹。如果 python 指向的不是 Python 3,请使用 python3。-I 标志可防止 Python 从图像文件夹中导入无关文件。

为何需要此工作流程

通过手动输入坐标“凭眼力”绘制一个可识别的形状是行不通的,即使感觉已经很接近了。每一个估算的点都会产生微小的偏移,这些偏移累积起来,导致最终结果只是一个通用形状,而不是目标物体。人们一眼就能看出问题(“它一点儿也不像”)。追踪参考图像自身的像素可以得到精确的几何形状,后续的每一步(颜色、阴影、动画)都建立在已经正确的形状之上。

有两个习惯与追踪本身同等重要:

  • 在声称匹配之前先证明匹配。 将你的输出与参考图并排放置,并将其叠加在参考图上。绝不要在没有观察过叠加图的情况下说“这和你图片匹配”。当实际不匹配时,声称匹配所损失的信任比绘制本身更大。
  • 在构建之前先获得设计批准。 以渲染预览的形式展示变体,让用户选择。修改预览成本很低,但修改已集成的代码成本高昂,而且用户未看过的设计往往会被拒绝。

环境设置

脚本需要 Python 3.9+ 以及 Pillow、NumPy 和 scikit-image 库,Node 18+,以及(用于预览)Edge、Chrome 或 Chromium 浏览器。用以下命令检查:

python -c "import PIL, numpy, skimage" && node --version

如果缺少 Python 包,请先询问再安装。pip install -r <skill>/requirements.txt 可安装它们,或者使用 uv run --with pillow --with numpy --with scikit-image python ... 无需安装即可运行。

在临时文件夹中工作。将参考图像保留在其原始位置,不要将其复制到任何将要共享的文件夹中。

操作步骤

1. 获取良好的参考图

扁平的艺术作品易于清晰追踪:2D 绘图、扁平图标、Logo、纯色和轮廓分明的卡通画。照片或 3D 渲染包含渐变和反射,会分解成杂点。如果你只有一张照片,请请求(或者在获得许可后搜索)同一主题的扁平绘图。一张干净的“如何绘制 X:最终步骤”图片是理想之选。仅使用照片来指导后续的阴影处理。

先亲自查看图像。用简单的词语命名其组成部分(以猫头鹰为例:耳羽、面盘、眼睛、喙、腹部、翅膀),以便之后与用户沟通。

2. 采样其颜色

python -I <skill>/scripts/palette.py <image>

此命令会打印图像尺寸、主题的边界框、主色调以及一个起始调色板。将其转化为追踪配置文件:每个扁平区域对应一个命名的颜色(body、belly、eye、line、background……)。小的区域(如喙、高光)可能低于起始调色板的截止线,因此请检查图像以确保不遗漏它们。同时注意抗锯齿边缘的颜色:深色轮廓通常会呈现为两到三种深色。为每种颜色创建单独的调色板条目,并将它们放在同一图层中。

3. 追踪

编写配置文件(references/config.md 文档详细说明了每个键的含义,examples/owl/owl.config.json 是一个可运行的示例),然后运行:

python -I <skill>/scripts/trace.py <image> <config.json> <out-dir>

每个像素都会被分配到其最近邻的调色板颜色。每个图层的连通区域会被勾勒出来(对轻微模糊的掩膜使用行进正方形算法,以实现平滑边缘)、简化,并作为 SVG 路径数据(使用图像自身的像素坐标)写入 <out-dir>/regions.json。一个 silhouette 图层(所有非背景部分)始终包含在内。脚本还会生成 trace.svg(结果的纯色 SVG)和 classes.png(显示每个像素分配到的颜色)。当某个区域呈现错误时,请查看 classes.png。references/config.md 末尾的表格列出了常见的修复方法。

4. 证明匹配

node <skill>/scripts/compare.mjs <out-dir>/regions.json <image> <config.json> <out-dir>/compare.html
python -I <skill>/scripts/render.py <out-dir>/compare.html <out-dir>/compare.png --size 1160x520

配置文件中的 compareColours 将每个图层映射到参考图自身的颜色,因此重建结果应与原始图像相似。页面会显示参考图、重建结果,以及重建结果以 55% 透明度叠加在参考图上、并用蓝色勾勒出轮廓的图像。诚实审视生成的 PNG 图像:检查轮廓、每个区域、线条及其粗细。修正配置文件并重新追踪,直到它们一致。也向用户展示此对比图。这是赢得他们对后续工作的信任的基础。

如果用户只需要当前图像的 SVG,那么 trace.svg 就是最终结果:将其与对比图一起交给用户,除非他们想要更多,否则在此停止。

5. 重设计为三种变体

基于相同的追踪形状,使用用户要求的颜色,构建三种截然不同的渲染效果。references/styles.md 提供了配方:

  • A,扁平图标: 纯色填充、粗轮廓、双色调明暗分割。在小尺寸下最清晰。
  • B,柔和3D: 每个区域获得其独立的左上角光源渐变,平板带有柔和的投影,光泽外壳,发光细节。
  • C,电影级金属: 多波段拉丝渐变,斜面边缘,反射条纹,泛光效果。

重新着色(例如“暗黑版”)是对相同图层进行调色板交换。每个区域的形状保持不变,因此它仍然能被识别为原始设计。

制作一个预览页面,在深色和浅色背景上分别展示每个变体的大图,以及实际使用时的尺寸(例如 72px 和 40px 的头像、32px 和 16px 的网站图标等),并提供原始颜色以供比较。使用 render.py 将其渲染为 PNG 图,自己查看,并以你的环境允许的任何方式(可以打开的图片或文件、artifact、侧边栏)展示给用户。请用户选择,或组合不同风格(例如 C 的表面效果搭配 A 的轮廓)。在得到确定之前,不要进行任何集成构建。

6. 动画(可选,在选定样式后进行)

阅读 references/animation.md。简而言之:每种状态(静止、思考、说话、暂停)对应一种情绪,使用 CSS 关键帧创建循环,使用 SMIL <animate> 创建与数据同步的动画,例如根据语音响度包络进行唇形同步。以 HTML 页面形式实时预览情绪,同时发送静态 PNG 截图。再次获得批准。

7. 集成构建

现在才接触项目。将追踪得到的形状转化为代码模块,而不是到处粘贴路径数据:

node <skill>/scripts/emit_shapes.mjs <out-dir>/regions.json <target>/shapes.ts --name OWL_SHAPES --layers silhouette,body,wings=wing[],eyes=eye,ink

key=layer 可重命名图层,[] 可将其区域保留为数组,以便每个区域可以独立着色。该模块还会导出 OWL_SHAPES_VIEWBOX。保持坐标在参考图像的像素空间内,并使用该 viewBox 进行定位。嵌入说明见 references/animation.md,关于 Claude Code 模组的说明见 references/claude-code-mods.md。

与用户沟通

  • 展示,而非描述。 每个设计步骤都以用户可以查看的图像结束。
  • 当用户说看起来不对劲时,相信他们。在进行任何更改前,对照参考图比较,并具体说明差异所在。
  • 如果他们问你是如何做到的,用简单易懂的语言解释方法(“我将每个像素按颜色排序,追踪每种颜色的轮廓,然后将轮廓转换为矢量形状”)。
  • 对于受商标保护的角色或公司 Logo,为个人使用而追踪是可以的。在不显得说教的前提下,提醒一句:发布或出售则是另一回事。

相关技能