我正在尝试使用RMagick将一个SVG转换成不同大小的PNG。
当我使用Magick::Image.read('drawing.svg')
读取SVG并将其写入drawing.png(相当于从命令行中运行convert drawing.svg drawing.png
)时,大小为744x1052。
假设我希望PNG的大小是默认大小的两倍。你不能只是读取它,改变它的大小,然后写出来,因为这首先会栅格化SVG,然后缩放该图像到两倍大小,失去质量和使用矢量图形的全部好处。所以,如果我理解正确,你应该在读取时设置图像的密度。
image = Magick::Image.read('drawing.svg'){self.density = 144}.first
但是,
image.density
仍然报告密度为“72x72”,如果我将图像写出,则其大小与之前相同,为744x1052。似乎无论我如何指定读取密度,都没有关系。使用144、"144"、144.0、"144.0"、"144x144"和"144.0x144.0",它总是返回"72x72"。从命令行运行
convert -density 144 drawing.svg drawing.png
可以按预期工作,并生成比以前大两倍的PNG,即2104x1488。我正在使用OS X 10.6.7、ImageMagick 6.7.0-0(通过MacPorts安装)、RMagick 2.13.1和Ruby 1.9.2p180。当我将我的代码放入Heroku上的一个小Sinatra webapp的上下文中时,它具有相同的不正确行为,因此问题似乎并不在于OS X或MacPorts。
convert
命令似乎首先将SVG光栅化为较大的图像,这样就会产生正确平滑的线条。 - hynkleopts.size
指定百分比几何,但我无法使其工作或生成告诉我为什么它不起作用的错误消息。这对于我与ImageMagick的交互来说非常典型:如果你能让它工作,那么它是一个很棒的库,但界面很糟糕。 - mu is too short