2011-12-20 15 views

Odpowiedz

44

Wystarczy umieścić to w pliku 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 

Dokumentacja i przykład tutaj: http://www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit

Pamiętaj, resize_to_fit będzie skalowanie obrazów, jeśli są one mniejsze niż 100px. Jeśli nie chcesz tego zrobić, zastąp go resize_to_limit.

+0

, jak wskazał Giang Nguyen: w odniesieniu do fali nośnej i przetwarzania obrazu, "[100, nil]" wydaje się być równoważne z "[100, 100]"! –

+0

dziękuję, zaktualizowano – iwasrobbed

15

używam

process :resize_to_fit => [100, 10000] 

Korzystając 10000 lub dowolną bardzo dużą liczbę pozwolić Carrierwave znać wysokość jest wolny, tylko zmiana rozmiaru szerokości.

@iWasRobbed: Nie sądzę, że to poprawne rozwiązanie. Zgodnie z linku wklejonym o resize_to_fit: The maximum height of the resized image. If omitted it defaults to the value of new_width. Więc w twoim przypadku process :resize_to_fit => [100, nil] jest równoważna process :resize_to_fit => [100, 100] który nie gwarantuje, że zawsze możesz liczyć na stałą szerokość 100px

12

nie byłoby lepszym rozwiązaniem rzeczywiście być:

process :resize_to_fit => [100, -1] 

w ten sposób nie trzeba ograniczyć wysokość wcale

EDIT: Właśnie sobie sprawę, to działa tylko z MiniMagick, dla rmagick wydaje się nie mieć opcję ale dodać dużą liczbę do wysokości

+0

Pamiętaj, że '[-1, 100]' nie działałoby, co oznacza, że ​​nie można tworzyć miniaturek o stałej wysokości. – lulalala

Powiązane problemy