Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于曲别针和ImageMagick中的纵横比限制图像尺寸_Ruby On Rails_Image Processing_Imagemagick_Paperclip - Fatal编程技术网

Ruby on rails 基于曲别针和ImageMagick中的纵横比限制图像尺寸

Ruby on rails 基于曲别针和ImageMagick中的纵横比限制图像尺寸,ruby-on-rails,image-processing,imagemagick,paperclip,Ruby On Rails,Image Processing,Imagemagick,Paperclip,我的rails应用程序使用回形针和ImageMagick处理上传的照片 我现在有这样的设置 as_attached_file :photo, :styles => { :original => "1500x1500>", :thumb => "400x400>#", :large => "1080x1080>" }, :convert_options => { :thumb => '-quality 60', :large => '-q

我的rails应用程序使用回形针和ImageMagick处理上传的照片

我现在有这样的设置

as_attached_file :photo, :styles => { :original => "1500x1500>", :thumb => "400x400>#", :large => "1080x1080>" }, :convert_options => { :thumb => '-quality 60', :large => '-quality 60'},  :default_url => "/missing.png"
例如,如果有人上传尺寸为1000x100(10:1纵横比)的图像,我想限制纵横比(在:大和:原始上),以便在纵横比过大时裁剪图像


ie:如果比率超过4:1或1:4,则裁剪

最好的方法是实现自定义处理器。这样,您就可以实现您的逻辑,并决定何时以您想要的方式更改图像

请参见自定义处理器的示例实现。在我的例子中,我需要在图像上应用水印

lib/paperclip\u处理器/watermark.rb 您可以参考自定义处理器的文档:

module Paperclip
  class Watermark < Thumbnail

    attr_accessor :format, :watermark_path, :watermark_gravity, :watermark_dissolve

    def initialize file, options = {}, attachment = nil
      super
      @file               = file
      @format             = options[:format]
      @watermark_path     = options[:watermark_path]
      @watermark_gravity  = options[:watermark_gravity].nil? ? "center" : options[:watermark_gravity]
      @watermark_dissolve = options[:watermark_dissolve].nil? ? 40 : options[:watermark_dissolve]

      @current_format     = File.extname(@file.path)
      @basename           = File.basename(@file.path, @current_format)
    end

    def make
      return @file unless watermark_path

      dst = Tempfile.new([@basename, @format].compact.join("."))
      dst.binmode

      command = "composite"
      params = "-gravity #{@watermark_gravity} -dissolve #{@watermark_dissolve} #{watermark_path} #{fromfile} #{tofile(dst)}"

      begin
        success = Paperclip.run(command, params)
      rescue PaperclipCommandLineError
        raise PaperclipError, "There was an error processing the watermark for #{@basename}"
      end

      dst
    end

    def fromfile
      "\"#{ File.expand_path(@file.path) }[0]\""
    end

    def tofile(destination)
      "\"#{ File.expand_path(destination.path) }[0]\""
    end

  end
end
has_attached_file :file,
processors: [:thumbnail, :watermark],
styles: {
layout:    "100%",
preview:   {geometry: "900x900>", watermark_path: "#{Rails.root}/app/assets/images/watermarks/watermark_200.png"},
thumbnail: "300x300>",
miniature: "150x150>"
},
convert_options: {
layout:    "-units PixelsPerInch -density 100",
preview:   "-units PixelsPerInch -density 72",
thumbnail: "-units PixelsPerInch -density 72",
miniature: "-units PixelsPerInch -density 72"
}