web-dev-qa-db-ja.com

Carrierwave-画像を固定幅にサイズ変更

私はRMagickを使用していて、画像を100pxの固定幅にサイズ変更して、高さを比例的にスケーリングしたいと考えています。たとえば、ユーザーが300x900pxをアップロードする場合、100x300pxにスケーリングしたいと思います。

27
David

これをアップローダーファイルに入れるだけです。

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に置き換えてください。

47
iwasrobbed

私が使う

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の固定幅が得られるとは限りません

16
Giang Nguyen

より良い解決策は実際にはありません:

process :resize_to_fit => [100, -1]

この方法では、高さを制限する必要はありません。

編集:これはMiniMagickでのみ機能することに気づきました

12
Rafael Vidaurre