2011-12-20 24 views

Trả lời

44

Chỉ cần đặt này trong tập tin tải lên của bạn:

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 

Tài liệu và ví dụ ở đây: http://www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit

Hãy ghi nhớ, resize_to_fit sẽ mở rộng quy mô hình ảnh nếu họ có kích thước nhỏ hơn 100px. Nếu bạn không muốn làm điều đó, hãy thay thế bằng resize_to_limit.

+0

như được chỉ ra bởi Giang Nguyễn: liên quan đến carrierwave và xử lý hình ảnh, '[100, nil]' có vẻ tương đương với '[100, 100]'! –

+0

cảm ơn, cập nhật – iwasrobbed

15

tôi sử dụng

process :resize_to_fit => [100, 10000] 

Sử dụng 10000 hoặc bất kỳ số lượng rất lớn để cho Carrierwave biết chiều cao là miễn phí, chỉ cần thay đổi kích thước chiều rộng.

@iWasRobbed: Tôi không nghĩ đó là giải pháp đúng. Theo liên kết mà bạn dán về resize_to_fit: The maximum height of the resized image. If omitted it defaults to the value of new_width. Vì vậy, trong trường hợp của bạn process :resize_to_fit => [100, nil] tương đương với process :resize_to_fit => [100, 100] đó không đảm bảo rằng bạn sẽ luôn có được chiều rộng cố định của 100px

12

Sẽ không phải là giải pháp tốt hơn thực sự là:

process :resize_to_fit => [100, -1] 

bằng cách này bạn không cần phải hạn chế chiều cao ở tất cả các

EDIT: chỉ cần nhận ra điều này chỉ làm việc với MiniMagick, Đối RMagick bạn dường như không có lựa chọn nào khác để thêm một số lượng lớn với chiều cao

+0

Lưu ý rằng '[-1, 100]' sẽ không hoạt động, có nghĩa là bạn không thể tạo hình thu nhỏ hình ảnh có chiều cao cố định. – lulalala

Các vấn đề liên quan