Я использую RMagick и хочу, чтобы мои изображения были изменены до фиксированной ширины 100 пикселей и пропорционально масштабировали высоту. Например, если пользователь должен был загрузить 300x900px, я бы хотел, чтобы его масштабировали до 100x300px.
Carrierwave - изменение размера изображения до фиксированной ширины
Ответ 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 у вас, похоже, нет опции, но для добавления большого количества в высоту