Rails Paperclip如何使用ImageMagick的过滤器选项?

jyo*_*eph 20 ruby-on-rails imagemagick paperclip

我最近使用Rails实现了Paperclip,并希望尝试使用ImageMagick中的一些滤镜选项,例如模糊.我无法找到任何如何做到这一点的例子.是否通过了:样式作为另一种选择?

:styles => { :medium => "300x300#", :thumb => "100x100#" }
Run Code Online (Sandbox Code Playgroud)

@plang的答案是正确的,但我想给出模糊的确切解决方案,以防万一有人在寻找并发现这个问题:

:convert_options => { :all => "-blur 0x8" }
// -blur  {radius}x{sigma} 
Run Code Online (Sandbox Code Playgroud)

这改变了这个:
替代文字

对此:
替代文字

pla*_*ang 13

我没有对此进行测试,但您应该可以使用"convert_options"参数,如下所示:

:convert_options => { :all => ‘-colorspace Gray’ }
Run Code Online (Sandbox Code Playgroud)

看看https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/thumbnail.rb

我个人使用我自己的处理器.

在模型中:

  has_attached_file :logo,
                    :url  => PaperclipAssetsController.config_url,
                    :path => PaperclipAssetsController.config_path,
                    :styles => {
                                 :grayscale => { :processors => [:grayscale] }
                               }
Run Code Online (Sandbox Code Playgroud)

在lib中:

module Paperclip
  # Handles grayscale conversion of images that are uploaded.
  class Grayscale < Processor

    def initialize file, options = {}, attachment = nil
      super
      @format = File.extname(@file.path)
      @basename = File.basename(@file.path, @format)
    end

     def make  
       src = @file
       dst = Tempfile.new([@basename, @format])
       dst.binmode

       begin
         parameters = []
         parameters << ":source"
         parameters << "-colorspace Gray"
         parameters << ":dest"

         parameters = parameters.flatten.compact.join(" ").strip.squeeze(" ")

         success = Paperclip.run("convert", parameters, :source => "#{File.expand_path(src.path)}[0]", :dest => File.expand_path(dst.path))
       rescue PaperclipCommandLineError => e
         raise PaperclipError, "There was an error during the grayscale conversion for #{@basename}" if @whiny
       end

       dst
     end

  end
end
Run Code Online (Sandbox Code Playgroud)

对于简单的灰度转换,这可能不是100%必需的,但它可以工作!

  • 好吧,感觉它更容易在转换选项中添加`:styles => {:gray =>"450x250"},:convert_options => {:gray =>" - ltl 0x8"} (4认同)
  • 对不起,感谢您的回答! (2认同)