如何使用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>
标签的width
和height
属性来解决这个问题,以匹配我想要的输出大小,然后使用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
得到了
所以,我打开了Inkscape,然后去了File
, Export as PNG file
,popup一个GUI框,允许我设置我需要的确切尺寸。
Ubuntu 16.04 Linux
上的Ubuntu 16.04 Linux
: Inkscape 0.91 (September 2016)
(这张图片来自Kenney.nl的资产包 )
- 如何使用ImageMagick将图标连接成单个图像?
- RMagick抱怨说它configuration了不同版本的ImageMagick
- 使用ImageMagick将PDF转换为PNG
- 使用ImageMagick压缩JPG文件的build议
- 使用ImageMagick将SVG转换为具有抗锯齿function的透明PNG
- Imagemagick在mac os x mountain lion上找不到.tiff格式的代理库
- RMagick安装:找不到MagickWand.h
- 如何从保存框架尺寸的GIF文件中提取框架
- ImageMagick / RMagick – 无法安装RMagick 2.13.1。 找不到Magick-config