Проблемы со скриптом 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.

Другие вопросы по тегам