Подтвердить что ты не робот

Carrierwave - изменение размера изображения до фиксированной ширины

Я использую RMagick и хочу, чтобы мои изображения были изменены до фиксированной ширины 100 пикселей и пропорционально масштабировали высоту. Например, если пользователь должен был загрузить 300x900px, я бы хотел, чтобы его масштабировали до 100x300px.

4b9b3361

Ответ 1

Просто поместите это в свой файл uploader:

class ImageUploader < CarrierWave::Uploader::Base

  version :resized do
    # returns an image with a maximum width of 100px 
    # while maintaining the aspect ratio
    # 10000 is used to tell CW that the height is free 
    # and so that it will hit the 100 px width first
    process :resize_to_fit => [100, 10000]
  end

end

Документация и пример здесь: http://www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit

Помните, что resize_to_fit будет увеличивать изображения, если они меньше 100 пикселей. Если вы не хотите, чтобы это было сделано, замените это на resize_to_limit.

Ответ 2

Я использую

process :resize_to_fit => [100, 10000]

Используйте 10000 или любое очень большое число, чтобы Carrierwave знал, что высота свободна, просто измените размер до ширины.

@iWasRobbed: Я не думаю, что это правильное решение. В соответствии с ссылкой, которую вы вставили около resize_to_fit: The maximum height of the resized image. If omitted it defaults to the value of new_width. Итак, в вашем случае process :resize_to_fit => [100, nil] эквивалентно process :resize_to_fit => [100, 100], что не гарантирует, что вы всегда получите фиксированную ширину 100px

Ответ 3

Не было бы лучшего решения на самом деле:

process :resize_to_fit => [100, -1]

Таким образом, вам не нужно ограничивать высоту вообще

EDIT: Просто понял, что это работает только с MiniMagick, для RMagick у вас, похоже, нет опции, но для добавления большого количества в высоту