Я пытаюсь использовать 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.