如何将位图批量转换为 SVG?

Vil*_*age 15 command-line conversion svg images

我有很多灰度位图需要转换为矢量格式,例如 SVG。我一直在使用 Inkscape,它提供了不错的结果,但是打开、转换和保存文件大约需要 10-15 分钟。是否有可以转换这些的批处理或命令行工具?

slm*_*slm 21

钾肥

我在题为“如何使用 ImageMagick 将 JPEG 图像转换为 SVG 格式?. 建议的答案之一potrace

$ convert input.jpg output.ppm
$ potrace -s output.ppm -o svgout.svg
Run Code Online (Sandbox Code Playgroud)

结果

           党卫军#1             党卫军#2

查看potrace网站,您显然可以直接从 BMP 转到 SVG。

$ potrace -s input.bmp -o output.svg
Run Code Online (Sandbox Code Playgroud)

自动跟踪

另一种选择potraceautotrace.

$ autotrace -output-file ouput.svg -output-format svg --color-count 4 input.bmp
Run Code Online (Sandbox Code Playgroud)

您可能需要使用--color-count来获得适合您需求的图像。

结果

                                                 SS #3

使用哪个?

在这两个中,它实际上取决于源材料。如果您正在转换图像,那么potrace可能是更好的选择。对于非照片材料(如字体)和无生命物体(如包含道路等内容的风景),则autotrace使用其--centerline开关。

虽然不是照片的最佳选择,但它在线条艺术和类似海报的图像方面做得很好。对颜色不太好。Autotrace 具有 Inkscape 中嵌入的 Potrace 对话框中没有的一些功能。例如,有一个中心线开关对于跟踪道路(在地图中)或字体字符特别有用。

批量转换

您可以在 Bash 中将这些命令中的任何一个包装在 for 循环中,这将使执行批量转换任务变得容易。

$ for i in *.bmp; do <CONVERSION TOOL> ... "$i"; done
Run Code Online (Sandbox Code Playgroud)

参考


rki*_*ing 9

自动跟踪

你可以试试autotrace

使用以下命令可以获得以下结果:

autotrace --output-format svg --output-file output.svg --color-count 4 imgsrc.jpg
Run Code Online (Sandbox Code Playgroud)

我必须对生成的 svg 进行屏幕截图并另存为 png 以显示输出。

这是一个源图像jpg:

头骨来源

这是生成的图像:

头骨转换


ter*_*don 7

通常,我使用convertImageMagic执行我所有的图像处理任务,但我无法让它与 svg 文件一起使用。但是,您可以inkscape从命令行使用它自己:

for i in *bmp; do inkscape -f "$i" -l "$i.svg"; done
Run Code Online (Sandbox Code Playgroud)

这将创建名为foo.bmp.svg. 要获得正确的名称,请尝试以下操作:

for i in *bmp; do inkscape -f "$i" -l "${i%.bmp}.svg"; done
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于,至少在我的系统上,它会弹出一个烦人的图形对话框,询问我是否要链接或嵌入图像:

                                 在此处输入图片说明

因此,您仍然需要手动单击“确定”,但它仍然比逐个文件执行要快得多。

据我所知,输出图像是相同的:

   在此处输入图片说明


从理论上讲,无论是convertrsvg-convert应该能够做到这一点,但我无法得到它在几分钟内我花了试图在我的图片很好地工作。尽管如此,它们都值得研究。

  • 我怀疑 Inkscape 会简单地将位图图像嵌入到 SVG 中,因此它们的外观相同。 (6认同)