Carrierwave - изменение размера изображения до фиксированной ширины - PullRequest
27 голосов
/ 20 декабря 2011

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

Ответы [ 3 ]

47 голосов
/ 20 декабря 2011

Просто поместите это в файл загрузчика:

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 будет увеличивать изображения, если они меньше, чем 100px. Если вы не хотите, чтобы это делалось, замените это на resize_to_limit.

16 голосов
/ 28 июня 2012

Я использую

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

12 голосов
/ 01 мая 2014

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

process :resize_to_fit => [100, -1]

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

РЕДАКТИРОВАТЬ: Просто понял, что это работает только с MiniMagickRMagick, похоже, у вас нет выбора, кроме как добавить большое число к высоте

...