1

アプリで水平方向の画像と垂直方向の画像の違いを認識し、ユーザーがアップロードするときにそれに応じてサイズを変更できるようにしたいと考えています。

私はそれをminimagickで動作させることができましたが、何らかの理由でRmagickと同じように動作しません.以下はminimagickに使用したロジックです(initializers/carrierwave.rb内)

使用したい他の機能については、rmagick に切り替える必要があります。

require 'carrierwave/orm/activerecord'

module CarrierWave
    module RMagick
        def from_orientation(portrait, landscape)
            manipulate! do |img|
                if img[:width] > img[:height]
                    width, height = landscape
                else
                    width, height = portrait
                end
                img.resize "#{width}x#{height}>"
                img
            end
        end
    end
end

ご覧のとおり、モジュールを minimagick から rmagick に変更し、適切な gem も含めました。これは私が得たエラーであり、正確に何が間違っているのか疑問に思います:

undefined method `>' for nil:NilClass 

大なり括弧は明らかにクラスではないため、これは私を混乱させます。

事前にご協力いただきありがとうございます。

4

1 に答える 1

1

問題は、RMagick と MiniMagick のインターフェースが異なることです。ライブラリを切り替えるだけで、同じコードが機能することを期待することはできません。

あなたのエラーは、問題が img[:width] が nil であることを示しています。img[:width] は RMagick で実行できるものではないため、これは理にかなっています。img.columns幅を指定する必要があり、同様img.rowsに高さを指定します。

RMagick のドキュメントを確認することをお勧めします。

于 2013-05-31T16:26:40.277 に答える