如何使用ImageMagick将JPEG图像转换为SVG格式?

28 imagemagick

如何使用ImageMagick将JPEG图像转换为SVG格式?

小智 43

你需要先使用potrace并转换为位图.

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

  • 作为一个没有使用中间文件的单行程序:`convert -channel RGB -compress None input.jpg bmp: - | potrace -s - -o output.svg` (5认同)
  • 除了 Portable PixMap `.ppm`,Portable GrayMap `.pgm` 甚至 Portable Bitmap `.pbm` 也可以用作中间文件类型。[这里](https://en.wikipedia.org/wiki/Netpbm_format) 是更多信息。 (2认同)

Kur*_*fle 27

实际上,通过完整安装最新版本的ImageMagick,它应该像以下一样简单:

convert  some.jpeg  some.svg
Run Code Online (Sandbox Code Playgroud)

当然,ImageMagick本身无法完成所有工作 - 它使用委托(帮助程序)来处理SVG输入或输出.(其他答案已经指出了这一点.)

要查看所有代理(及其各自的命令)的(部分)列表,请运行

convert  -list delegate
Run Code Online (Sandbox Code Playgroud)

要查看所有委托机密隐藏的配置文件,请参阅

convert  -list delegate | grep delegates.xml
Run Code Online (Sandbox Code Playgroud)

要查看(部分)SVG处理委托列表,请运行

convert  -list delegate | grep -i svg
Run Code Online (Sandbox Code Playgroud)

但是,ImageMagick喜欢将一些外部帮助程序实用程序置于"秘密"模式,并且在使用上述命令时不一定会显示它们的存在.

只需查看delegates.xml文件本身.在我的系统上它是:

grep -i svg /opt/local/etc/ImageMagick/delegates.xml | grep -i --color stealth

  <delegate decode="autotrace" stealth="True" \
            command="&quot;/opt/local/bin/convert&quot; &quot;%i&quot; \
            &quot;pnm:%u&quot;\n\
            &quot;/opt/local/bin/autotrace&quot; \
           -input-format pnm \
           -output-format svg \
           -output-file &quot;%o&quot; &quot;%u&quot;"/>

  <delegate decode="svg:decode" stealth="True" \
            command="&quot;/opt/local/bin/inkscape&quot; &quot;%s&quot; \
            --export-png=&quot;%s&quot; \
            --export-dpi=&quot;%s&quot; \
            --export-background=&quot;%s&quot; \
            --export-background-opacity=&quot;%s&quot; \
            &gt; &quot;%s&quot; 2&gt;&amp;1"/>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在我的系统上,ImageMagick安装会自动使用(其中包括)......

  • ... inkscape将SVG转换为PNG;
  • ... autotrace将PNM转换为SVG;

当然,人们可以争论autotrace直接使用的好处- 但这需要首先手动将any-input格式转换为PNM.因此,对于这个初步步骤,你可能会使用ImageMagick ......

  • 当我尝试这个并打开svg时,它只是将png数据嵌入到svg xml中. (2认同)

sch*_*der 16

您实际上需要一些软件或代码来在两者之间对图像进行矢量化,因为jpg是一种栅格格式,而SVG是一种矢量格式.我不认为imagemagick可以为你做到这一点.

  • +1:将一堆线转换成一个大的像素矩阵可以相当愚蠢.反过来需要一些相当严肃的智慧. (4认同)