it-swarm-pt.tech

Carrierwave - Redimensionando imagens para largura fixa

Estou usando o RMagick e quero que minhas imagens sejam redimensionadas para uma largura fixa de 100px e dimensione a altura proporcionalmente. Por exemplo, se um usuário enviar um 300x900px, eu gostaria que fosse dimensionado para 100x300px.

27
David

Basta colocar isso no seu arquivo de upload:

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

Documentação e exemplo aqui: http://www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit

Tenha em mente, resize_to_fit aumentará a escala das imagens se elas forem menores que 100 px. Se você não quiser fazer isso, substitua-o por resize_to_limit.

47
iwasrobbed

Eu uso

process :resize_to_fit => [100, 10000]

Usar 10000 ou qualquer número muito grande para informar à Carrierwave que a altura é livre, basta redimensionar para a largura.

@iWasRobbed: Não acho que seja a solução correta. De acordo com o link que você colou sobre resize_to_fit: The maximum height of the resized image. If omitted it defaults to the value of new_width. Então no seu caso process :resize_to_fit => [100, nil] é equivalente a process :resize_to_fit => [100, 100] que não garante que você sempre obtenha a largura fixa de 100px

16
Giang Nguyen

Uma solução melhor não seria realmente:

process :resize_to_fit => [100, -1]

Dessa forma, você não precisa limitar a altura

EDIT: Acabei de perceber que isso só funciona com o MiniMagick. Para o RMagick, você parece não ter outra opção a não ser adicionar um número grande à altura

12
Rafael Vidaurre