2011-12-20 13 views
25

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

ответ

44

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

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.

+0

, как указано Giang Nguyen: в отношении обработки несущей и обработки изображений '[100, nil]' кажется эквивалентным '[100, 100]'! –

+0

спасибо, обновлено – iwasrobbed

15

Я использую

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

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

process :resize_to_fit => [100, -1] 

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

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

+0

Обратите внимание, что '[-1, 100]' не будет работать, то есть вы не сможете создавать уменьшенные эскизы с фиксированным высотом. – lulalala

Смежные вопросы