如何在保持宽高比但改变范围的同时将SVG转换为PNG?

Bri*_*ian 3 svg png image imagemagick

我正在尝试将SVG转换为PNG.SVG是非方形矩形.我希望图像的纵横比保持不变,因此需要填充图像的范围(透明).

我是OS X Mavericks,10.9.2.

我用3个工具尝试了这个,每个工具都有问题:

使用ImageMagick:

convert -background none -resize 200x200 -gravity center -extent 200x200 rect.svg rect-imagemagick.png 
Run Code Online (Sandbox Code Playgroud)

开始 -

在此输入图像描述

结束 -

图像是正方形,具有正确的宽高比,但是模糊. 我见过其他用户使用imagemagick将SVG转换为PNG来报告此问题.我已经升级了imagemagick以使用rsvg(通过brew),如下面版本的代表所示.

版:

# convert --version
Version: ImageMagick 6.9.1-3 Q16 x86_64 2016-01-23 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: DPC Modules
Delegates (built-in): bzlib cairo fontconfig freetype jng jpeg ltdl lzma png rsvg tiff xml zlib
Run Code Online (Sandbox Code Playgroud)

使用rsvg:

rsvg-convert -a -w 200 -h 200 rect.svg > rect-rsvg.png
Run Code Online (Sandbox Code Playgroud)

开始 -

在此输入图像描述

结束 -

图像清晰,正确的宽高比,但我没有看到使其成为方形(扩展图像)的方法.

版:

# rsvg-convert --version
rsvg-convert version 2.40.9
Run Code Online (Sandbox Code Playgroud)

使用Inkscape:

inkscape -z -e rect-inkscape.png -w 200 -h 200 rect.svg
Run Code Online (Sandbox Code Playgroud)

开始 -

在此输入图像描述

结束 -

图像方形清晰,但纵横比不正确.

版:

# inkscape --version
W: AppleCollationOrder setting not found, using AppleLocale.
Setting LANGSTR from AppleLocale: en
Overriding empty LANG from /usr/share/locale/locale.alias
Setting Language: en_US.UTF-8
Inkscape 0.48.5 r10040 (Jul 12 2014)
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 9

好吧,如果我将两个实用程序结合起来,我意识到这有一个简单的答案:

rsvg-convert -a -w 200 -h 200 rect.svg > rect-rsvg.png
convert -background none -resize 200x200 -gravity center -extent 200x200 rect-rsvg.png rect-correct.png
Run Code Online (Sandbox Code Playgroud)

首先转换为PNG rsvg-convert,正确转换但不扩展.然后将imagemagick从PNG扩展到PNG.