ImageMagick脚本在Rails中使用RMagick的问题

时间:2013-11-24 00:18:54

标签: ruby imagemagick rmagick

我有以下命令行脚本,可以按照我的意愿运行:

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 个答案:

答案 0 :(得分:1)

讨厌回答我自己的问题,但我似乎已经解决了。

看起来我试图过于聪明,但在阅读了几次文档后,我认为我对+swapcomposite方法的交互方式感到困惑。

据我所知,+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脚本产生相同的结果。