【问题标题】:Carrierwave Cropping载波裁剪
【发布时间】:2011-07-20 05:24:50
【问题描述】:

我有一个 CarrierWave ImageUploader,它创建了几个版本的原始图像,需要根据我的模型中的值(crop_x、crop_y、crop_w 和crop_h)进行裁剪。

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick
  ...
  version :t do
    process :cropper
    process :resize_to_fill => [75, 75]
  end
  ...
  def cropper
    manipulate! do |img| 
      img = img.crop "#{model.crop_x}x#{model.crop_y}+#{model.crop_w}+#{model.crop_h}"
      img
    end 
  end

end

我遇到的问题是,如果我们没有任何设置但我不知道将这个逻辑放在哪里,我需要计算一些默认裁剪值。我尝试将它放在我的照片模型(上传器安装到)中的 before_validation 中,但这似乎是在执行裁剪函数后调用的。我在想它要么需要在 ImageUploader 文件中,要么在创建拇指之前发生的一些回调中。

【问题讨论】:

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


【解决方案1】:

你可以这样做:

process :cropper

def cropper
  manipulate! do |img|
    if model.crop_x.blank?
      image = MiniMagick::Image.open(current_path)
      model.crop_w = ( image[:width] * 0.8 ).to_i
      model.crop_h = ( image[:height] * 0.8 ).to_i
      model.crop_x = ( image[:width] * 0.1 ).to_i
      model.crop_y = ( image[:height] * 0.1 ).to_i
    end
    img.crop "#{model.crop_w}x#{model.crop_h}+#{model.crop_x}+#{model.crop_y}"
  end 
end

我正在运行与我的一个应用程序中相同的代码。

【讨论】:

  • 我想你可能有一个小错字,第一个 model.crop_y 应该是 model.crop_h
  • ArgumentError (wrong number of arguments (1 for 3, 4, or 5))。我觉得你的img.crop和我的不一样……
  • @AlexC 是来自MiniMagickcrop,您可能正在使用RMagick 或其他
  • @faron,谢谢,但这个问题现在对我来说已经过时了:p。
  • 对于 RMagick,传入裁剪参数:crop!(x, y, w, h)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多