Я пытаюсь использовать RMagick для преобразования SVG в PNG другого размера.
Когда я читаю в 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. Когда я помещаю свой код в контекст небольшого веб-приложения Sinatra на Heroku, он ведет себя так же некорректно, поэтому проблема, похоже, не связана с OS X или MacPorts.