如何使用Image Magick将SVG转换为PNG?

我有一个定义大小为16×16的SVG文件。 当我使用图像Magick的转换程序将其转换为PNG,然后我得到一个16×16像素的PNG这是太小:

convert test.svg test.png 

我需要指定输出PNG的像素大小。 -size参数似乎被忽略, -scale参数在将PNG转换为PNG 对其进行缩放。 到目前为止,我通过使用-density参数得到了最好的结果:

 convert -density 1200 test.svg test.png 

但是我不满意,因为我想用像素来指定输出大小,而不用math来计算密度值。 所以我想要做这样的事情:

 convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png 

那么我必须在这里使用什么神奇的参数?

在这种情况下,我一直无法从ImageMagick中获得好的效果,但Inkscape在Linux和Windows上做得很好:

 inkscape -z -e test.png -w 1024 -h 1024 test.svg 

下面是使用此命令将16×16 SVG缩放到200×200 PNG的结果:

在这里输入图像说明

在这里输入图像说明

仅供参考,我的Inkscape版本(在Ubuntu 12.04上)是:

 Inkscape 0.48.3.1 r9886 (Mar 29 2012) 

在Windows 7上,它是:

 Inkscape 0.48.4 r9939 (Dec 17 2012) 

尝试svgexport

 svgexport input.svg output.png 64x svgexport input.svg output.png 1024:1024 

svgexport是一个简单的跨平台命令行工具,我已经将svg文件导出为jpg和png,请参阅这里获取更多选项。 要安装svgexport 安装npm ,然后运行:

 npm install svgexport -g 

编辑:如果您发现图书馆的问题,请在GitHub上提交 ,谢谢!

这不是完美的,但它做的工作。

 convert -density 1200 -resize 200x200 source.svg target.png 

基本上它增加了DPI足够高(只是使用一个受过教育/安全的猜测),resize是用足够的质量。 我试图find一个适当的解决scheme,但经过一段时间后认为这足以满足我目前的需要。

注意:使用200×200! 强制给定的决议

如果您在MacOS X上,并且Imagemagick的转换出现问题,您可以尝试使用RSVG lib重新安装。 使用HomeBrew:

 brew remove imagemagick brew install imagemagick --with-librsvg 

确认它正在委派:

 $ convert -version Version: ImageMagick 6.8.9-8 Q16 x86_64 2014-12-17 http://www.imagemagick.org Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC Features: DPC Modules Delegates: bzlib cairo fontconfig freetype jng jpeg lcms ltdl lzma png rsvg tiff xml zlib 

它应该显示rsvg

当svg单位不是px (例如cm)时,Inkscape似乎不起作用。 我有一个空白的图像。 也许,它可以通过twiddling dpi来修复,但是太麻烦了。

Svgexport是一个node.js程序,因此通常不会有用。

Imagemagick的转换工作正常:

  ~$ convert -background none -size 1024x1024 infile.svg outfile.png 

如果使用-resize ,则图像模糊,文件更大。

最好

 ~$ rsvg -w 1024 -h 1024 infile.svg outfile.png 

它是最快的,依赖性最less,产量比转换小30%左右。 安装librsvg2-bin来获取它。 似乎没有一个手册页,但你可以input:

 ~$ rsvg --help 

得到一些帮助。 简单很好。

为了重新调整图像,应该使用选项-density。 据我所知,标准密度是72,并将尺寸映射为1:1。 如果你想输出png是原始svg设置密度的两倍大到72 * 2 = 144

convert -density 144 source.svg target.png

你为什么不试一试inkscape命令行,这是我的bat文件把这个目录中的所有svg转换成png:

FOR %% x IN(* .svg)DO C:\ Ink \ App \ Inkscape \ inkscape.exe %% x -z –export -dpi = 500 –export-area-drawing –export-png =“% %〜nx.png”

在按照Jose Alban的答案中的步骤之后,我可以使用以下命令使ImageMagick正常工作:

 convert -density 1536 -background none -resize 100x100 input.svg output-100.png 

数字1536来自密度的估计,请参阅此答案以获取更多信息。

我来到这篇文章 – 但我只是想批量和快速地进行转换,而不使用任何参数(由于几个不同大小的文件)。

 rsvg drawing.svg drawing.png 

对我来说,要求可能比原作者要容易一些。 (希望在MS PowerPoint中使用SVG,但不允许)

我已经通过改变<svg>标签的widthheight属性来解决这个问题,以匹配我想要的输出大小,然后使用ImageMagick转换它。 奇迹般有效。

这里是我的Python代码,这个函数将返回JPG文件的内容:

 import gzip, re, os from ynlib.files import ReadFromFile, WriteToFile from ynlib.system import Execute from xml.dom.minidom import parse, parseString def SVGToJPGInMemory(svgPath, newWidth, backgroundColor): tempPath = os.path.join(self.rootFolder, 'data') fileNameRoot = 'temp_' + str(image.getID()) if svgPath.lower().endswith('svgz'): svg = gzip.open(svgPath, 'rb').read() else: svg = ReadFromFile(svgPath) xmldoc = parseString(svg) width = float(xmldoc.getElementsByTagName("svg")[0].attributes['width'].value.split('px')[0]) height = float(xmldoc.getElementsByTagName("svg")[0].attributes['height'].value.split('px')[0]) newHeight = int(newWidth / width * height) xmldoc.getElementsByTagName("svg")[0].attributes['width'].value = '%spx' % newWidth xmldoc.getElementsByTagName("svg")[0].attributes['height'].value = '%spx' % newHeight WriteToFile(os.path.join(tempPath, fileNameRoot + '.svg'), xmldoc.toxml()) Execute('convert -background "%s" %s %s' % (backgroundColor, os.path.join(tempPath, fileNameRoot + '.svg'), os.path.join(tempPath, fileNameRoot + '.jpg'))) jpg = open(os.path.join(tempPath, fileNameRoot + '.jpg'), 'rb').read() os.remove(os.path.join(tempPath, fileNameRoot + '.jpg')) os.remove(os.path.join(tempPath, fileNameRoot + '.svg')) return jpg 

有一件事就是在input文件名之后设置-density 。 这没有用。 把它转换成第一个选项(在其他之前)使它工作(对我来说,YMMV等)。

@ 808sound的最佳答案不适合我。 我想resize Kenney.nl UI包

得到了 肯尼UI包搞砸了

所以,我打开了Inkscape,然后去了FileExport as PNG file ,popup一个GUI框,允许我设置我需要的确切尺寸。

Ubuntu 16.04 Linux上的Ubuntu 16.04 LinuxInkscape 0.91 (September 2016)

(这张图片来自Kenney.nl的资产包 )