使用回形针进行裁剪不起作用?

时间:2014-07-17 07:05:44

标签: ruby-on-rails ruby-on-rails-3 paperclip

我正在尝试使用paperclipjcrop实施裁剪,但上传的图片不会发生任何事情。

我正在尝试以下方式。 这是我的模态代码..................

attr_accessor :crop_x, :crop_y, :crop_w, :crop_h

  has_attached_file :picture, :styles => {:big => "200>x200"},
    :convert_options => {:blurred_card => "-blur 0x8"}, 
    :path => ":rails_root/public/system/user_albums/:id/:style.:extension",
    :processors => [:cropper],
    :url => "/system/user_albums/:id/:style.:extension",
        :default_url => "/images/sss.png"
    after_update :reprocess_picture, :if => :cropping?

  def cropping?
    !crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
  end

  def picture_geometry(style = :original)
    @geometry ||= {}
    @geometry[style] ||= Paperclip::Geometry.from_file(picture.path(style))
  end

  private

  def reprocess_picture
    picture.reprocess!
  end

处理器代码

module Paperclip  
  class Cropper < Thumbnail  
    def transformation_command  
      if crop_command
        original_command = super
        if original_command.include?('-crop')
          original_command.delete_at(super.index('-crop') + 1)
          original_command.delete_at(super.index('-crop'))
        end
        crop_command + original_command
      else  
        super  
      end  
    end  

    def crop_command  
      target = @attachment.instance  
      if target.cropping?
        ["-crop", "#{target.crop_w}x#{target.crop_h}+#{target.crop_x}+#{target.crop_y}"]
      end  
    end  
  end  
end

我们是否需要在数据库中创建与作物相关的列,如下所示

:crop_x:crop_y:crop_w:crop_h

2 个答案:

答案 0 :(得分:0)

您正在某个地方调用模型中的attr_accessible。这将创建可使用update_attributes设置的属性的白名单。您的裁剪字段未列出,因此无法使用update_attributes设置它们。

解决方案是在模型中添加以下内容:

  attr_accessible :crop_x, :crop_y, :crop_w, :crop_h

将启用以下功能:

  @user.update_attributes(params[:user])

或者,您可以手动设置属性

  @user.crop_x = x
  @user.crop_y = y
  @user.crop_w = w
  @user.crop_h = h

答案 1 :(得分:0)

您只需要使用#而不是&gt;作为参数:

  

has_attached_file:picture,:styles =&gt; {:big =&gt; &#34; 200#X200&#34; }