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)
查看potrace
网站,您显然可以直接从 BMP 转到 SVG。
$ potrace -s input.bmp -o output.svg
Run Code Online (Sandbox Code Playgroud)
另一种选择potrace
是autotrace
.
$ autotrace -output-file ouput.svg -output-format svg --color-count 4 input.bmp
Run Code Online (Sandbox Code Playgroud)
您可能需要使用--color-count
来获得适合您需求的图像。
在这两个中,它实际上取决于源材料。如果您正在转换图像,那么potrace
可能是更好的选择。对于非照片材料(如字体)和无生命物体(如包含道路等内容的风景),则autotrace
使用其--centerline
开关。
虽然不是照片的最佳选择,但它在线条艺术和类似海报的图像方面做得很好。对颜色不太好。Autotrace 具有 Inkscape 中嵌入的 Potrace 对话框中没有的一些功能。例如,有一个中心线开关对于跟踪道路(在地图中)或字体字符特别有用。
您可以在 Bash 中将这些命令中的任何一个包装在 for 循环中,这将使执行批量转换任务变得容易。
$ for i in *.bmp; do <CONVERSION TOOL> ... "$i"; done
Run Code Online (Sandbox Code Playgroud)
你可以试试autotrace。
使用以下命令可以获得以下结果:
autotrace --output-format svg --output-file output.svg --color-count 4 imgsrc.jpg
Run Code Online (Sandbox Code Playgroud)
我必须对生成的 svg 进行屏幕截图并另存为 png 以显示输出。
这是一个源图像jpg:
这是生成的图像:
通常,我使用convert
ImageMagic执行我所有的图像处理任务,但我无法让它与 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)
这种方法的问题在于,至少在我的系统上,它会弹出一个烦人的图形对话框,询问我是否要链接或嵌入图像:
因此,您仍然需要手动单击“确定”,但它仍然比逐个文件执行要快得多。
据我所知,输出图像是相同的:
从理论上讲,无论是convert
和rsvg-convert
应该能够做到这一点,但我无法得到它在几分钟内我花了试图在我的图片很好地工作。尽管如此,它们都值得研究。