2011-12-20 5 views

risposta

44

Basta mettere questo nel vostro file di 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 

documentazione e l'esempio qui: http://www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit

tenere a mente, resize_to_fit scalerà le immagini se sono più piccoli di 100px. Se non vuoi che lo faccia, sostituiscilo con resize_to_limit.

+0

come indicato da Giang Nguyen: per quanto riguarda l'elaborazione carrierwave e l'elaborazione dell'immagine, '[100, nil]' sembra essere equivalente a '[100, 100]'! –

+0

grazie, aggiornato – iwasrobbed

15

Io uso

process :resize_to_fit => [100, 10000] 

Usa 10000 o qualunque numero molto grande di far conoscere Carrierwave l'altezza è gratuito, basta ridimensionare la larghezza.

@iWasRobbed: Non penso che sia la soluzione corretta. Secondo il link è stato incollato su resize_to_fit: The maximum height of the resized image. If omitted it defaults to the value of new_width. Quindi nel tuo caso process :resize_to_fit => [100, nil] equivale a process :resize_to_fit => [100, 100] che non garantisce che sarà sempre ottenere la larghezza fissa di 100px

12

Non sarebbe una soluzione migliore in realtà essere:

process :resize_to_fit => [100, -1] 

in questo modo non c'è bisogno di limitare l'altezza a tutti

EDIT: appena realizzato questo funziona solo con MiniMagick, per RMagick ti sembra di avere altra scelta se non per aggiungere un gran numero all'altezza

+0

Nota che '[-1, 100]' non funzionerebbe, il che significa che non è possibile creare miniature di immagini ad altezza fissa. – lulalala