在GIMP中将图像导出为SVG格式。

我有一个项目一直在GIMP上工作(一张图片),我想将它导出为SVG格式。这可能吗,还是我只能导出多个尺寸的图片呢?
我知道GIMP可以读取SVG文件,但它能导出吗?

Gimp就像是一个部分开源的项目,因为XCF文件格式并不是广泛使用的开放标准,所以变得有点像一种专有格式。也就是说,对于在GIMP中完成的精心设计作品的编辑者来说,很难以简单的方式将他的作品导出为SVG等其他可能的格式,以在其他应用程序中进行操作。 - kokbira
SVG文件是我们首先考虑的开放格式,因为它支持图层。有时候我们并不在意SVG是否完全矢量化,只要导出格式能保持图层元素和可编辑文本的位置和格式即可。 - kokbira
6个回答

GIMP v2.8并不能直接将位图导出为SVG文件。以前有一个插件可以实现这个功能,但是这个项目显然已经停止了。我们可以将图像作为位图对象导入到InkscapeInstall inkscape,然后将其保存为SVG文件。图像将保持为位图文件,即在缩放时会出现走样(见下文)。

但是,Inkscape可以做更多的事情。我们可以将我们已经投入了大量工作的位图导入到Inkscape,并通过几次点击鼠标转换为漂亮的矢量图形。

以下是具体操作方法:

  1. 打开Inkscape。

  2. 选择"文件 - 导入"导入一个位图文件。

  3. 选择将图片"嵌入"

  4. 使用选择工具()选择图片。

  5. 选择路径 - 跟踪位图...进行设置(如下图所示,2种颜色 = "扫描" ):

    enter image description here

  6. 选择"更新"进行预览,直到设置满意。

  7. 点击"确定"开始进行描边。

现在,在原始位图上方将显示一个矢量化的图像。我们可以调整大小或移动这个新创建的对象,删除原始图像,或选择"对象 - 解组"以适应子对象的形状或颜色。

如果需要的话,可以缩小矢量化图像的尺寸(按住CTRL键锁定比例),以便适应页面。否则,在查看时可能会出现“裁剪”的情况。
使用“文件 - 另存为”将文件保存为SVG格式。
当我们增大矢量图形的尺寸时,最快可以看到它的优势。下面是放大到2500%的示例。顶部是原始位图,底部是矢量化对象:
此图像和对象是从您的原始图像创建的,链接在chat中。

1谢谢你提供的好概述。如果你能对原始问题给出一个回答,那就更完善了。据说Photoshop CC可以导出SVG图像,那么Gimp可以做到吗? - daniels
1@daniels:Gimp可以通过插件将位图嵌入到SVG中进行导出,但是这种方法(和PS一样)无法将位图转换为矢量图。要实现这个功能,你需要使用Inkscape或其他追踪软件,比如autotrace。对于后者,有一个Gimp插件叫做Trace,我还没有测试过它。 - Takkat
@Takkat,gimpToSVG扩展已经不存在了。 - kokbira
@Takkat,在哪里?在https://github.com/jabiertxof/gimpToSVG上,你只能看到一个“已转移到GitLab”的信息。在给定的GitLab链接https://gitlab.com/jabiertxof/gimpToSVG/上,你无法下载,并且要查看代码,“您需要权限。想要查看数据吗?请向管理员申请访问权限。”但是在哪里呢? - kokbira
@Takkat,尝试使用git.exe pull -v --progress "https://gitlab.com/jabiertxof/gimpToSVG/"命令返回了以下错误信息:"remote: You are not allowed to download code from this project. / fatal: unable to access 'https://gitlab.com/jabiertxof/gimpToSVG.git/': The requested URL returned error: 403 / git did not exit cleanly (exit code 1) (21075 ms @ 13/06/2017 08:29:28)"。 - kokbira
@kokbira: 啊啊啊!我现在明白了 - ZIP文件基本上也是空的。谢谢你指出来 - 我会删除所有相关内容(反正也没什么意义)。 - Takkat

即使Gimp不是一个矢量程序,你实际上可以使用“导出路径”菜单项将单个路径导出为SVG文件。
这里有一个详细解释如何操作的图片教程

1这是一个非常重要的功能需要注意。谢谢分享! - k4rtik

GIMP是一款栅格图形编辑应用程序。SVG是一种矢量图形形式。如果您想编辑SVG文件,您应该安装inkscape软件包,并使用Inkscape代替。此外,请注意SVG在某种程度上不能完全“可缩放”,即无论您缩放到多大尺寸,都能得到良好的图像,因此,根据您所创建的内容,您可能需要以不同大小、不同细节等级绘制图像,以确保这些图像在那些尺寸下看起来不错。例如,对于应用程序的图标,无论它们是作为栅格图像还是矢量图像绘制的,都需要绘制多个尺寸。

你可以使用一个单独的SVG文件,通过在CSS中设置尺寸来改变大小。我经常这样做...你不需要在多个尺寸上绘制图像(显然你是七年前写的评论...不是针对你,而是给其他人看的)。 - Andy Swift
@AndrewSwift 我对可扩展性和多种尺寸的评论仍然有效。一个16x16像素的区域无法容纳所有细节,而这些细节可能会放入一个明显更大的图像中。SVG并非在无限范围内完全可扩展。因此,可能需要绘制多个图像来处理多个范围集,以便在这些范围内以适当的细节显示图像。这主要适用于需要以不同范围广泛变化的方式显示的事物,比如图标。 - dobey

如果您需要将光栅图像转换为矢量图像,autotrace是一个命令行工具,可以完美地完成这个任务。
在Debian和Ubuntu上,它作为一个名为autotrace的Debian软件包提供。
以下是使用示例:
autotrace input.jpg --output-file output.svg --output-format svg

更新: 我还尝试了potrace,在autotrace遇到困难时也获得了成功。

4我尝试使用两个图片,但出现了“读取错误”和“[7B]pT[F5]: 无效的块类型”...它们是有效的PNG格式。 - Adrian
1@Adrian,命令不应该是 autotrace input.png --output-file output.svg --output-format svg 吗? - Iulian Onofrei
@Adrian 我有同样的问题,但刚刚查看了网站,我觉得它不支持PNG格式。我尝试了PBM格式,然后它就可以了! - poshaughnessy
1它无法识别png格式,所以我将其转换为jpg。它从一个200KB的jpg生成了一个近6MB的svg文件。原因是它基本上将每个单独的像素视为一个小方块。这种形式不可用。 - Csaba Toth
2对于未来的读者而言,值得注意的是,InkScape(在被选答案中提到)目前使用了Potrace的分支版本作为其“图像轨迹化”工具。因此,potrace和InkScape的轨迹化工具的输出之间不应该有显著差异。 - Spencer D

potrace就是这个工具。你可以批量处理它们,但首先必须将图像转换为单色:

ls ./p*.jpg | xargs -L1 -I {}  convert -monochrome {} {}.bmp
ls -1 ./*.bmp | xargs -L1 -I {} potrace {} -r 300 -b svg -o {}.svg

安装:
sudo apt install potrace

1这个方法对于 ls ./*.png 是有效的。然而,为了恢复原始颜色,我将 output.bmp.svg 复制到 edit.svg 中,并在 edit.svg 文件中将 fill="#000000" 更改为 fill="#000050",然后保存并重新打开图像查看器。050 不是一个幸运的猜测,07000 也恢复了与原始颜色有些相似的颜色。 - a.t.

嗯,实际上,你可以用GIMP保存SVG文件。例如,你可以使用这个命令:(gimp-vectors-export-to-file 1 "new.svg" 0)


你能再解释一下你的意思和如何做吗?这是一个命令行工具吗?我没有这个命令。 - pLumo