2011-05-22 31 views
7

我想要做的是上傳一張圖片,然後將用戶帶到一個新頁面,在那裏我將使用Jcrop讓用戶選擇想要裁剪的圖像部分,然後存儲該圖像。從本質上講,我想讓它成爲一個兩階段的過程。如何在導軌中使用carrierwave'事實'後裁剪圖像?

我知道如何做javascript部分,並且我瞭解如何創建此功能的基本流程。但是,我不知道如何完成此載波的具體細節。

我能找到最接近的是:

image.recreate_versions! 

但我仍然無法在高度/寬度通過並啓動X,Y裁剪它。

例如,我怎樣才能告訴carrierwave在事後'剪裁' - 即不是當圖像第一次上傳時?我看到了「處理」圖像的方法,但它們會自動以固定的高度和寬度進行。我該如何推遲?

從本質上講,我希望做的是動態定義版本,在那裏我可以指定高度和寬度與X,Y

感謝

回答

5

這是我能做到的最好。有可能是一個更簡單的方法來做到這一點,但是這是我的黑客:

這裏是當裁剪信息傳遞我的「POST」控制器動作:

def update_crop 
    @user = User.find(current_user.id) 
    @user.crop(params[:x].to_i, params[:y].to_i, params[:h].to_i, params[:w].to_i) 

    redirect_to(profile_path, :notice => 'Your profile and avatar was successfully updated.') 
    end 

下面是添加到用戶的方法模型包含一個「阿凡達」圖片上傳:

def crop(x, y, h, w) 
    image = Magick::ImageList.new(avatar.current_path) 
    cropped_image = image.crop(x, y, h, w) 
    cropped_image.write(avatar.current_path) 

    avatar.recreate_versions! 
    end 

基本上這只是高新插孔當前,覆蓋它,然後告訴Carrierwave創建