Как вы обрезаете изображение с несущей волной «по факту» в рельсах? - PullRequest
7 голосов
/ 22 мая 2011

Что я хотел бы сделать, это загрузить изображение, затем перенести пользователя на новую страницу, где я буду использовать Jcrop, чтобы позволить пользователю выбрать часть изображения, которую он хочет обрезать, и затем сохранить это изображение.По сути, я хочу сделать это двухэтапным процессом.

Я знаю, как выполнить часть javascript, и я понимаю основной процесс создания этой функциональности.Тем не менее, Я не осведомлен о специфике несущей волны о том, как этого добиться .

Самое близкое, что я могу найти:

image.recreate_versions!

Но я все еще могу 't передать в высоту / ширину и начать x, y, чтобы обрезать его.

Например, как я могу сказать, что carrierwave выполняет обрезку «по факту», т.е. не когда изображение загружается для первоговремя?Я вижу методы для «обработки» изображения, но они происходят автоматически с фиксированными высотой и шириной.Как я могу отложить это?

По сути, я хотел бы динамически определить версию, где я могу указать высоту и ширину и x, y

Спасибо

1 Ответ

5 голосов
/ 23 мая 2011

Это лучшее, что я могу сделать. Вероятно, есть более простой способ сделать это, но это мой хак:

Вот мое действие '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 создать

...