【问题标题】:Blur images with Shrine and image_processing gem使用 Shrine 和 image_processing gem 模糊图像
【发布时间】:2020-03-08 14:47:03
【问题描述】:

我正在尝试使用 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&gt; -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 有更多的经验,所以我就这么做了。

【问题讨论】:

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


    【解决方案1】:

    您需要分别指定每个命令行参数,在本例中为-blur0x8

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

    您也可以调用#blur 方法,通过method_missing 的魔法将其应用为-blur

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

    【讨论】:

      【解决方案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.

      如果可以,请先调整大小,这样会快很多。您还将获得更一致的结果,因为模糊程度不取决于调整大小。

      【讨论】:

        猜你喜欢
        • 2016-08-29
        • 2016-12-02
        • 2018-04-25
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-24
        相关资源
        最近更新 更多