Как вы обрезаете изображение с помощью несущей волны «постфактум» в рельсах?

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

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

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

image.recreate_versions!

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

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

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

Спасибо


person Fire Emblem    schedule 22.05.2011    source источник


Ответы (1)


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

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

person Fire Emblem    schedule 22.05.2011