我有一个定义为16x16大小的SVG文件。当我使用ImageMagick的转换程序将其转换为PNG时,我得到了一个16x16像素的PNG,太小了:

convert test.svg test.png

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

convert -density 1200 test.svg test.png

但我并不满意,因为我想指定以像素为单位的输出大小,而不做数学运算来计算密度值。所以我想这样做:

convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png

这里我要用到的神奇参数是什么?


当前回答

当svg单位不是px(例如cm)时,Inkscape似乎无法工作。我得到一个空白图像。也许,它可以通过旋转dpi来修复,但它太麻烦了。

Svgexport是一个node.js程序,所以通常不太有用。

Imagemagick的转换工作正常:

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

如果您使用-resize,图像是模糊的,文件是大得多。

BEST

rsvg-convert -w 1024 -h 1024 infile.svg -o outfile.png

它速度最快,依赖性最小,输出比convert小30%左右。安装librsvg2-bin获取:

sudo apt install -y librsvg2-bin

似乎没有手册页,但你可以输入:

rsvg-convert --help

去寻求帮助。简单就是好。

其他回答

Try svgexport:

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

svgexport是一个简单的跨平台命令行工具,我已经为导出svg文件jpg和png,看到这里更多的选项。要安装svgexport install npm,执行以下命令:

npm install svgexport -g

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

在使用brew的macOS上,直接使用librsvg效果很好

brew install librsvg
rsvg-convert test.svg -o test.png

通过rsvg-convert——help可以获得许多选项

这不是完美的,但它做到了。

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

基本上,它增加了足够高的DPI(只是使用一个有根据的/安全的猜测),调整大小是有足够质量的。我试图找到一个合适的解决方案,但过了一段时间后,我认为这已经足够满足我目前的需求了。

注意:使用200x200!强制执行给定的决议

在遵循Jose Alban回答中的步骤之后,我能够使用以下命令让ImageMagick正常工作:

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

1536这个数字来自于对密度的粗略估计,更多信息请看这个答案。

透明背景,使用ImageMagick 7以目标高度/大小导出:

magick -background none -size x1080 in.svg out.png

单线质量变换器:

for i in *svg; do magick -background none -size x1080 "$i" "${i%svg}png"; done