把一张 PNG 或 JPG 变成 SVG,并不是简单地把文件后缀从“.png”改成“.svg”。真正的图片矢量化需要识别颜色区域、边缘和几何形状,再把原本由像素组成的画面重新描述成矢量路径。对于 Logo、图标、插画或者需要继续编辑的图片,这一步往往比普通格式转换复杂得多。

悟空图片转SVG工具(Goku Image to SVG Tool)就是围绕这个需求开发的一个开源项目。它没有重新实现一套矢量化算法,而是将 Vecto 的命令行矢量化能力包装成 Streamlit Web 界面,让原本需要在终端中执行的图片描摹操作,可以直接通过浏览器完成。

Goku Image to SVG Tool:图片怎么转换成可编辑SVG?

它解决的不是换后缀问题

项目官方将它定位为基于 Vecto 引擎的图片矢量化工具。用户上传位图以后,底层 Vecto 会对图片进行 trace,也就是根据图片内容重新生成矢量路径,最终得到 SVG 文件。

这和普通的“PNG 转 SVG”在线工具存在一个容易混淆的区别。有些所谓的转换工具只是把原始位图嵌入一个 SVG 容器中,图片本身仍然是像素图;而这个项目的重点是进行实际的矢量描摹,输出由矢量路径组成的结果。

项目的处理结构比较清晰:Streamlit 负责文件上传、参数选择和结果展示,Vecto CLI 负责真正的位图到 SVG 转换,完成后再由前端提供预览、对比和文件导出。

Streamlit Web界面
        ↓
上传位图并设置参数
        ↓
调用 Vecto CLI 进行 trace
        ↓
生成 SVG 和分割结果
        ↓
预览、对比并导出文件

这种设计的意义在于,用户不需要了解 Vecto 的命令行参数,也可以使用它的主要描摹能力。

上传后可以怎样调整结果

图片矢量化很少存在一套参数适合所有素材。Logo、像素画、插画和照片的颜色结构差异很大,因此悟空图片转SVG工具没有把转换过程做成单纯的“上传—下载”,而是在右侧提供了一组参数供用户调整。

调色板设置

工具支持自动颜色模式,也可以手动指定颜色数量。当前项目代码中的颜色数量范围为 2 到 64,并且转换后会显示对应的颜色色块。

对于颜色比较简单的 Logo、图标和扁平插画,减少颜色数量通常更容易得到结构清晰的矢量结果;如果图片本身存在大量渐变或复杂色彩,就需要根据实际效果增加颜色数量。

不同的描摹风格

当前界面提供 auto、crisp、blended 和 photo 四种风格选项。这些参数直接对应底层 Vecto 的处理能力,并不是项目自己增加的滤镜。

实际选择时可以把它理解成对不同图片结构的适配。边缘清晰的图标和插画,与颜色过渡较多的照片,本身就不适合使用完全相同的描摹策略。

细节等级控制

细节参数提供 low、medium 和 high 三档。细节越高,并不意味着任何图片都一定会“更好”,因为矢量化还需要考虑路径复杂度和后续编辑需求。

如果只是希望把一个简单图标重新制作成 SVG,过多的小细节反而可能增加路径复杂程度;对于结构较丰富的素材,则可以尝试提高细节等级,再通过预览判断是否值得保留。

三种视图帮助判断描摹效果

这个项目比较实用的一点,是没有只展示最终 SVG,而是保留了原图、矢量结果和分割结果之间的对比。

用户可以通过滑块查看原图与矢量图之间的差异,也可以切换到分割视图。相比单独打开两个文件来回比较,这种方式更容易观察边缘是否发生变化、颜色区域是否被错误合并,以及某些细小元素有没有在描摹过程中消失。

分割视图尤其适合判断矢量化算法如何理解原始图片。对于颜色块明显的图片,可以直观看到不同区域是如何被划分的。如果分割结果本身已经和原图存在明显偏差,就可以继续修改调色板、风格或细节参数,而不是直接下载最终文件。

这也是它和普通“一键转换”工具之间比较明显的使用差异:重点不仅是生成一个 SVG,而是让用户在导出前有机会判断这个 SVG 是否真的符合自己的需求。

支持哪些图片和导出方式

根据当前项目 README 和页面代码,上传端支持多种常见位图格式,包括:

  • PNG

  • JPG / JPEG

  • BMP

  • GIF

  • TGA

  • TIFF

  • WebP

  • PBM

  • PPM

完成转换后可以直接下载 SVG。如果实际需求并不是继续编辑矢量路径,而是希望得到不同尺寸的位图,工具还提供 PNG 渲染功能。

当前页面允许用户设置 PNG 导出的缩放倍率,代码中的范围为 0.1 到 10 倍。也就是说,同一个 SVG 结果可以进一步渲染成不同尺寸的 PNG,不必重新进行一次位图描摹。

这对于需要同时准备 SVG 图标和 PNG 素材的场景比较方便。例如网站前端可能需要保留 SVG,而某些内容管理系统或其他平台仍然要求 PNG,就可以在同一个处理流程中完成两种文件的输出。

在线使用还是自己本地运行

项目 README 提供了一个部署在 Streamlit Community Cloud 上的在线版本,适合不希望配置运行环境、只是临时处理图片的用户。打开页面上传图片后即可开始转换。

由于整个项目本身是开源的,也可以直接克隆 GitHub 仓库运行自己的实例。官方提供的基本安装方式如下:

git clone https://github.com/goku-open/goku-image-to-svg-tool.git
cd goku-image-to-svg-tool
pip install -r requirements.txt
streamlit run streamlit_app.py

启动完成后,通过浏览器打开本机的 8501 端口即可进入操作界面。

项目的 Python 依赖并不复杂,当前 requirements 文件主要包含 Streamlit、Pillow、streamlit-image-comparison 和 pytest。真正执行矢量化任务的是 Vecto 二进制程序。

需要特别注意的是,当前仓库直接附带的是 Vecto v0.4.2 的 linux-x64 二进制文件。Vecto 官方同时提供 Windows、Linux、Intel Mac 和 Apple Silicon Mac 等不同平台的发行文件,但不能因此直接认为这个 Streamlit 项目附带的版本可以在所有系统中不做调整地运行。准备在非 Linux x64 环境自行部署时,应先检查对应的 Vecto CLI 文件以及项目调用方式。

参考资料

  1. 悟空图片转SVG工具 GitHub 项目仓库

  2. 悟空图片转SVG工具项目说明

  3. 项目 MIT 许可证

  4. Vecto 矢量化引擎项目

  5. Vecto 官方版本发布页面