2011-07-20 13 views
3

私はCarrierWave ImageUploaderを使用して、私のモデル(crop_x、crop_y、crop_w、およびcrop_h)の値に基づいてクロップする必要のある元の画像のいくつかのバージョンを作成します。私がいるCarrierwaveクロッピング

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でPhoto Model(アップローダーがマウントされている)に入れてみましたが、これはCropper関数が実行された後に呼び出されるようです。私はそれがImageUploaderファイルにあるか、親指が作成される前に発生するコールバックにある必要があると考えています。

+0

http://stackoverflow.com/questions/5985079/carrierwave-crop-specific-version – makaroni4

+0

この最新のRailsCastを確認してください:http://railscasts.com/episodes/182-cropping-images-revised – Tilo

答えて

9

あなたはこのような何か行うことができます。

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 

私は私のアプリケーションの1と同等のコードを実行しているし。

+1

あなたは私の一日を救った! – Kir

+0

私は、最初のmodel.crop_yがmodel.crop_h –

+0

'ArgumentError(引数の数が間違っています(1のための3、4、または5))'である小さな誤植があると思います。私はあなたの 'img.crop'が私のものと同じではないと思っています... –

関連する問題