7

私がやりたいのは、画像をアップロードしてから、ユーザーを新しいページに連れて行き、そこで Jcrop を使用して、トリミングしたい画像の部分をユーザーに選択させ、その画像を保存することです。本質的には、2段階のプロセスにしたいと考えています。

JavaScript 部分の実行方法を知っており、この機能を作成する基本的な流れを理解しています。ただし、これを達成する方法に関する搬送波の詳細はわかりません

私が見つけることができる最も近いものは次のとおりです。

image.recreate_versions!

しかし、高さ/幅と開始x、yを渡してトリミングすることはまだできません。

たとえば、「事後」にクロッピングを行うように Carrierwave に指示するにはどうすればよいでしょうか?つまり、画像が初めてアップロードされたときではありませんか? 画像を「処理」するメソッドが表示されますが、固定の高さと幅で自動的に行われます。どうすればこれを遅らせることができますか?

基本的に、私がやりたいことは、高さと幅、x、y を指定できるバージョンを動的に定義することです。

ありがとう

4

1 に答える 1

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

「アバター」画像アップローダを含む User モデルに追加するメソッドは次のとおりです。

  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 に答える