使用Shrine和image_processing gem模糊图像

时间:2019-11-12 20:41:30

标签: ruby-on-rails ruby image-processing imagemagick shrine

我正在尝试使用Shrine gem在Ruby on Rails应用程序中模糊图像。这是我的上传文件:

require "image_processing/mini_magick"

class ImageUploader < Shrine
  Attacher.derivatives_processor do |original|
    magick = ImageProcessing::MiniMagick.source(original)
    {
      blurred: magick.append('-blur 0x8').resize_to_limit!(1024, 1024)
    }
  end
end

我以最基本的方式设置了模型,控制器和表单,与Shrine入门教程-https://shrinerb.com/docs/getting-started中的设置相同。 尝试保存图像时出现以下错误:

  

*** MiniMagick :: Error异常:convert /tmp/shrine20191112-4479-1xo3vgk.jpg -auto-orient -blur 0x5 -resize 1024x1024> -sharpen 0x1 /tmp/image_processing20191112-4479-1w094sa.jpg因错误而失败:   转换:无法识别的选项-blur 0x5 @ error / convert.c / ConvertImageCommand / 893。   “

如果没有append('-blur 0x8'),它就可以正常工作,我在做什么错?我的ImageMagick版本是 7.0.7-11

顺便说一句,我不介意使用libvips来模糊图像,我只是对ImageMagick有更多的经验,所以这就是我所追求的。

2 个答案:

答案 0 :(得分:2)

您需要分别指定每个命令行参数,在这种情况下为-blur0x8

magick.append('-blur', '0x8').resize_to_limit!(1024, 1024)

您还可以调用#blur方法,该方法将通过-blur的魔力作为method_missing应用:

magick.blur('0x8').resize_to_limit!(1024, 1024)

答案 1 :(得分:2)

我认为libvips等效于:

require "image_processing/vips"

class ImageUploader < Shrine
  Attacher.derivatives_processor do |original|
    vips = ImageProcessing::Vips.source(original)
    {
      blurred: vips.resize_to_limit(1024, 1024).gaussblur(2).call
    }
  end
end

unknown methods are simply delegated to ruby-vips起。

如果可以的话,请先将调整大小放在首位,这样会更快。由于模糊程度不取决于调整大小,因此您还将获得更一致的结果。