我有一个定义为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

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


当前回答

在Linux上用Inkscape 1.0将svg转换为png需要使用

inkscape -w 1024 -h 1024 input.svg --export-file output.png

not

inkscape -w 1024 -h 1024 input.svg --export-filename output.png

其他回答

如果你在MacOS X上,Imagemagick的转换有问题,你可以尝试用RSVG库重新安装它。 使用自制程序:

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。

这对我来说是最有效的,也是最容易运行的。

find . -type f -name "*.svg" -exec bash -c 'rsvg-convert -h 1000  $0 > $0.png' {} \;
rename 's/svg\.png/png/' *

这将循环当前文件夹和子文件夹中的所有文件,寻找.svg文件,并将其转换为透明背景的png。

确保已经安装了librsvg并重命名了util

brew install librsvg
brew install rename

在ImageMagick中,如果使用Inkscape或RSVG与ImageMagick一起渲染,就会得到更好的SVG渲染,而不是自己内部的MSVG/XML渲染。RSVG是一个委托,需要与ImageMagick一起安装。如果Inkscape安装在系统上,ImageMagick将自动使用它。我使用Inkscape在ImageMagick下面。

没有什么“神奇的”参数可以满足您的需求。

但是,我们可以非常简单地计算出渲染输出所需的精确密度。

下面是一个小的50x50按钮,默认渲染密度为96:

convert button.svg button1.png


假设我们希望输出是500。输入是50,默认密度为96(旧版本的Inkscape可能使用92)。所以你可以根据尺寸和密度的比例来计算所需的密度。

512/50 = X/96
X = 96*512/50 = 983

convert -density 983 button.svg button2.png


在ImageMagick 7中,您可以按照如下方式进行计算:

magick -density "%[fx:96*512/50]" button.svg button3.png

or

in_size=50
in_density=96
out_size=512

magick -density "%[fx:$in_density*$out_size/$in_size]" button.svg button3.png

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

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

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

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

如果没有librsvg,你可能会得到一个黑色的png/jpeg图像。我们必须安装librsvg转换svg文件与imagemagick。

Ubuntu

 sudo apt-get install imagemagick librsvg
 convert -density 1200 test.svg test.png

操作系统

 brew install imagemagick librsvg
 convert -density 1200 test.svg test.png