在Carrierwave中重新处理不同版本的图像

Jon*_*hiu 17 upload ruby-on-rails image carrierwave

使用Carrierwave,我使用以下行创建了3个版本的头像 - 原始版本,small_thumb版本和large_thumb版本:

process :resize_to_limit => [400, 400]  

   version :big_thumb do
     process :resize_to_limit => [80, 80]
   end

   version :small_thumb do
     process :resize_to_limit => [50, 50]
   end
Run Code Online (Sandbox Code Playgroud)

我在我的AvatarUploader类中添加了一个额外的方法:

def reprocess(x,y,w,h)
        manipulate! do |img|
            img.crop(x.to_i, y.to_i, w.to_i, h.to_i, true) 

            end
resize_to_limit(180,180)  
end
Run Code Online (Sandbox Code Playgroud)

在执行更新后在我的模型中调用:

attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
after_update :reprocess_image, :if => :cropping?

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

private

def reprocess_image
image.reprocess(crop_x,crop_y,crop_w,crop_h)

end
Run Code Online (Sandbox Code Playgroud)

我已设法裁剪并调整原始版本的大小,但我似乎无法更新2个缩略图.我尝试了一些不同的技术无济于事.

有什么建议?

Mic*_*eed 54

尝试

image.recreate_versions!
Run Code Online (Sandbox Code Playgroud)

对不起,在公共汽车上.我无法阐述这一点.

  • `Model.all.each {| m | m.avatar.recreate_versions!}`如果你已经为具有预先存在记录的模型添加了新版本,那将会很有效. (14认同)