ImageMagick png to svg Image Size

Gui*_*lmi 17 imagemagick image-processing

我已使用以下命令成功将PNG转换为SVG:

convert Slide3.png Slide3_converted.svg
Run Code Online (Sandbox Code Playgroud)

问题是生成的文件高达380MB!

我试过这个版本的命令:

convert -size 2000x1200 Slide3.png Slide3_converted_smaller.svg
Run Code Online (Sandbox Code Playgroud)

但没有骰子.大小相同.

And*_*rea 15

SVG是矢量图像格式,因此将光栅图像(jpg,png,gif等)转换为svg可能是一项复杂的任务.

我尝试转换一个简单的图像:白色背景,红色圆圈和蓝色方块使用:

convert input.png output.svg
Run Code Online (Sandbox Code Playgroud)

这是来自此命令创建的svg文件的示例:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="800" height="600">
  <circle cx="0" cy="0" r="1" fill="white"/>
  <circle cx="1" cy="0" r="1" fill="white"/>
  ...
  <circle cx="218" cy="151" r="1" fill="rgb(255,247,247)"/>
  <circle cx="219" cy="151" r="1" fill="rgb(255,40,40)"/>
  <circle cx="220" cy="151" r="1" fill="red"/>
  <circle cx="221" cy="151" r="1" fill="rgb(255,127,127)"/>
  <circle cx="222" cy="151" r="1" fill="white"/>
  <circle cx="223" cy="151" r="1" fill="white"/>
  ...
  <circle cx="799" cy="599" r="1" fill="white"/>
</svg>
Run Code Online (Sandbox Code Playgroud)

基本上ImageMagick为每个像素创建一个1px半径圆,用正确的颜色绘制它.从5KB png开始,我的输出是22MB svg,这解释了你获得的巨大文件大小.

根据ImageMagick文档(见此处),会发生这种情况,因为缺少" AutoTrace "(参见此处)库:

"如果没有安装"AutoTrace"库并将其编译成IM,那么生成SVG输出将是大量的单像素圆,产生二进制结果,而不是平滑的SVG轮廓图像.这些图像通过比较是巨大的,并且通常需要很长时间才能通过SVG渲染渲染."

一旦安装了AutoTrace库,就可以试试这样的东西:

convert autotrace:A.gif  A_traced.png
Run Code Online (Sandbox Code Playgroud)