Проблемы со скриптом ImageMagick для RMagick в Rails
У меня есть следующий скрипт командной строки, который работает так, как я хотел бы:
convert photo.jpg -colorspace gray \( +clone -blur 0x10 \) +swap -compose divide -composite -linear-stretch 5%x0% sketch.jpg
Но у меня возникли некоторые трудности с получением окончательного изображения в моем проекте Rails. Я использую RMagick, и я старался следить за документацией по конвертации, как мог, но это не совсем правильно.
Мой код процесса (в CarrierWave::Uploader::Base
класс) выглядит следующим образом:
process :do_stuff
def do_stuff
manipulate! do |img|
img.colorspace = Magick::GRAYColorspace
blur = img.clone.blur_image(0,10)
blurred = Magick::ImageList.new
blurred << blur
blurred << img
sketch = Magick::Image.new(300,20)
img = sketch.composite(blurred,Magick::CenterGravity,Magick::DivideCompositeOp)
img = img.linear_stretch('05%','00%')
end
end
Мне интересно, может ли кто-нибудь умный взглянуть на этот код, чтобы убедиться, что он правильно преобразован в Ruby?
Кроме того, и это кажется почти тривиальным (но я не могу понять это), как мне получить sketch
инициализатор использовать размер исходного изображения?
Любая помощь высоко ценится. Благодарю.
1 ответ
Ненавижу отвечать на свой вопрос, но, похоже, я его решил.
Похоже, я пытался быть слишком умным, но после прочтения документации еще несколько раз, я думаю, что меня смутило то, как +swap
а также composite
метод взаимодействия.
Насколько я понимаю, +swap
гарантирует, что вместо того, чтобы размытое изображение стало наложенным на изображение в оттенках серого, теперь изображение в оттенках серого будет накладываться поверх размытого изображения.
После этого сценарий выглядит намного проще:
process :do_stuff
def do_stuff
manipulate! do |img|
img.colorspace = Magick::GRAYColorspace
blur = img.clone.blur_image(0,10)
img = blur.composite(img,Magick::CenterGravity,Magick::DivideCompositeOp)
img = img.linear_stretch('5%','0%')
end
end
И это, похоже, дает те же результаты, что и мой оригинальный скрипт ImageMagick.