我有一个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
我遇到的问题是,如果我们没有任何设置,我需要计算一些默认的裁剪值,但我不知道在哪里放这个逻辑。我尝试将它放在我的Photo模型(上载器安装到)中的before_validation中,但这似乎是在执行了cropper函数之后调用的。我想它要么是在ImageUploader文件中,要么是在创建拇指之前发生的一些回调中。
答案 0 :(得分:10)
您可以这样做:
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
我正在运行与我的某个应用程序中的代码相同的代码。