如何使用ImageMagick将SVG转换为PNG?

26 浏览
0 Comments

如何使用ImageMagick将SVG转换为PNG?

我有一个尺寸为16x16的SVG文件。当我使用ImageMagick的convert程序将其转换为PNG时,得到的PNG尺寸太小了:

convert test.svg test.png

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

convert -density 1200 test.svg test.png

但我不满意,因为我想要指定输出尺寸的像素值,而不是进行计算以得出密度值。所以我想要做这样的事情:

convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png

那么我需要使用什么神奇的参数呢?

0
0 Comments

如何用ImageMagick将SVG转换为PNG?

问题的原因:ImageMagick在这个实例中无法给出好的结果。

解决方法:使用Inkscape在Linux和Windows上对SVG进行缩放。以下是使用此命令将16x16的SVG缩放为200x200的PNG的结果:

# Inkscape v1.0+
inkscape -w 1024 -h 1024 input.svg -o output.png
# Inkscape older than v1.0
inkscape -z -w 1024 -h 1024 input.svg -e output.png

注意,你可以省略宽度/高度参数之一,让另一个参数根据输入图像的尺寸自动缩放。

Inkscape在保持透明背景方面表现良好,而ImageMagick会将SVG中的透明区域转换为PNG中的白色区域。

Inkscape比ImageMagick的转换速度更快。你还可以使用"-d 1200"来设置DPI。

在OSX上,安装了X11的Inkscape,可以使用以下命令:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e test.png -w 1024 -h 1024 test.svg

值得一提的是,Inkscape似乎没有一个选项来保持宽高比。如果需要保持宽高比,请尝试使用rsvg(或rsvg-convert)。

为了保持ImageMagick的背景透明,可以使用"-background none"命令行选项。

在OSX上,通过Homebrew安装Inkscape可以使用以下命令:

brew install homebrew/x11/inkscape

通过使用bash和Inkscape,可以一行将所有SVG文件批量转换为特定大小(30x30):

for file in *.svg; do inkscape -z -e "${file/.svg/.png}" -w 30 -h 30 $file; done

Inkscape在某些情况下可能会出现问题,例如忽略变换声明、打印一些正确渲染时没有背景颜色的黑色内容。这可能是Inkscape的一个bug。

为了避免GUI提示框,可以使用合适的命令,并确保命令正确。

对于最新的ImageMagick版本,渲染SVG没有问题,而且文档更完善,可以轻松导出特定分辨率或目标高度/宽度。

使用ImageMagick,可以使用以下命令完美地转换SVG:

convert img.svg -background none -size 1024x1024 img.png

ImageMagick仍然无法完全处理嵌套的引用。即使Inkscape只绘制了一半的图像文件,该文件在各种浏览器中显示正常并通过验证,因此文件本身没有问题。最终我不得不安装pip来使用cairosvg成功地将复杂的SVG渲染为PNG。

为了避免打开GUI并需要额外的输入,可以使用以下命令:

inkscape --convert-dpi-method=none -o output.png --export-overwrite -D --export-png-color-mode=RGBA_16 input.svg

以上为对于问题出现原因和解决方法的整理。

0
0 Comments

原因:提问者想要将SVG文件转换为PNG文件,并使用ImageMagick工具完成。然而,他尝试了一些方法后没有达到理想的效果,因此寻求其他解决方法。

解决方法:提问者给出了一种解决方法,即使用以下命令将SVG文件转换为PNG文件:convert -density 1200 -resize 200x200 source.svg target.png。他还建议在命令中使用-resize 200x200!来强制指定分辨率,并通过使用-background none选项来保持背景透明。此外,他还提到可以使用Inkscape工具来实现同样的效果。最后,他还给出了一个批处理版本的命令供参考。

文章如下:

如何使用ImageMagick将SVG文件转换为PNG文件?

如果你想将SVG文件转换为PNG文件,并且正在使用ImageMagick工具,下面的方法可能会对你有所帮助。

首先,你可以尝试使用以下命令将SVG文件转换为PNG文件:convert -density 1200 -resize 200x200 source.svg target.png。这个命令会将SVG文件的分辨率提高到足够高(根据经验或猜测),以确保在调整大小时保持足够的质量。需要注意的是,你可以使用-resize 200x200!来强制指定分辨率。

如果你想保持背景透明,你可以使用-background none选项。另外,如果你只想指定一个维度进行调整大小,比如宽度或高度,你可以使用-resize 200-resize x200。你可以在imagemagick.org/script/command-line-processing.php#geometry上查看更多关于ImageMagick的几何选项。

如果以上方法对你没有起作用,你可以尝试使用Inkscape工具来实现同样的效果。据说ImageMagick工具在内部使用Inkscape创建一个中间的EPS文件。因此,直接使用Inkscape可能会获得更好的结果。

最后,如果你想批量处理多个SVG文件,你可以使用以下批处理命令:for file in ./*.svg; do convert -density 1200 -background none -resize 200x200 $file `basename $file .svg`.png; done

需要注意的是,有些用户表示在转换过程中会出现曲线路径近似为线段的情况。如果你对结果的清晰度有要求,可能需要注意这一点。

总之,以上是将SVG文件转换为PNG文件的一些解决方法,希望对你有所帮助!

0
0 Comments

如何使用ImageMagick将SVG转换为PNG?

在这个问题中,有人提出了使用ImageMagick将SVG文件转换为PNG文件的问题。以下是一些回答和解决方法:

尝试使用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上提交问题。

对我来说,svgexport效果很好。输出的图片与浏览器渲染更加接近,比ImageMagick更好。

这对我也很有用,比在GUI工具中手动操作要节省时间。在Mac上很难找到一个价格较低的GUI应用程序来处理SVG文件。

在我的OSX上,svgexport对我没有任何作用,只是得到了一个空白的图片。

效果很好,但生成的图片很大。使用optipng,我能够将我的文本标志从3兆字节压缩到约20KB。

Inkscape在MacOS上效果不好,但这个工具做得很好,好工作!

请在GitHub上提交一个带有示例的问题。

实际上,我认为它可能有效;结果我的SVG依赖于隐式图像尺寸,这在SVG 2中是(我认为)的一部分。Chrome可以很好地渲染它们,但我猜他们已经开始实现SVG 2。

你能告诉我如何在Windows上使用它吗?如果你能告诉我如何在我的Visual Studio 2015应用程序中使用你的代码,那就更好了。

请在GitHub上提交一个问题吗?在评论中讨论这个问题很困难。

我已经提交了。在GitHub上打开了一个问题。

svgexport根据大小创建了巨大的PNG文件。建议使用svg2png,它也使用PhantomJS进行导出,但创建的图片要小得多。

我同意_H的观点,我尝试了这两个工具,svg2png做得更好。svgexport生成了一个巨大的308 KB文件,而svg2png生成了一个质量相同的25 KB文件。

对我来说,svg2png无法正确旋转线标记(如箭头),而且生成的PNG文件比svgexport的文件更大,而svgexport在浏览器中渲染SVG时完全一样(而Inkscape无法加载远程字体)。所以我为svgexport点赞,因为它是唯一实现我要求的工具。

这正是我长期以来一直在寻找的。太棒了!谢谢!

0