【发布时间】:2011-06-04 15:15:36
【问题描述】:
我正在尝试使用 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。
【问题讨论】:
标签: ruby vector svg imagemagick rmagick