7

我想做的是上传一张图片,然后将用户带到一个新页面,在那里我将使用 Jcrop 让用户选择他们想要裁剪的图片部分,然后存储该图片。本质上,我想让它成为一个两阶段的过程。

我知道如何做 javascript 部分,并且我了解如何创建此功能的基本流程。但是,我不知道如何实现这一点的载波细节

我能找到的最接近的是:

image.recreate_versions!

但是我仍然不能传入高度/宽度并开始 x,y 来裁剪它。

例如,我如何告诉carrierwave“事后”进行裁剪 - 即不是在第一次上传图像时?我看到了“处理”图像的方法,但它们会以固定的高度和宽度自动发生。我怎么能延迟这个?

本质上,我想做的是动态定义一个版本,我可以在其中指定高度和宽度以及 x,y

谢谢

4

1 回答 1

5

这是我能做的最好的。可能有一种更简单的方法,但这是我的 hack:

这是传递裁剪信息时我的“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 创建

于 2011-05-22T23:03:41.290 回答