我正在嘗試使用RMagick將SVG轉換爲不同大小的PNG。使用RMagick讀取圖像時的設置密度
當我在SVG中讀取Magick::Image.read('drawing.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中。
如果我只是使用柵格轉換光柵,resize肯定會是我想要的。但是,如果我在閱讀SVG後調整大小,我就會放大柵格圖像,所以我會得到您期望的[惡意反鋸齒工件](http://i.imgur.com/vINJF.png)。 'convert'命令似乎首先將SVG柵格化爲一個更大的圖像,這會產生[正確平滑的線條](http://i.imgur.com/640WE.png)。 – hynkle 2011-06-04 18:31:09
它不會讓我編輯我的評論,但我想提及[我在ImageMagick論壇中找到的一個線索](http://goo.gl/hVPt6),它表示'-density'的一個用法是指定矢量圖像的讀取密度。它顯然不像RMagick那樣具有與「轉換」相同的含義。 – hynkle 2011-06-04 18:39:06
@ hynkle:看看我的更新。你應該能夠爲'opts.size'指定幾何百分比,但是我無法使它工作或產生錯誤消息,告訴我爲什麼它不起作用。這對我與ImageMagick的交互來說非常典型:如果你能使它工作,那麼可怕的界面就是很好的庫。 – 2011-06-04 19:19:31