2010-12-15 10 views
5

少しの調査の後、私は新しいrail3アプリケーションでCarrierwaveとmini_magickを使用することに決めました。Carrierwaveとmini_magickの幅と高さの確認

私はそれを設定して、それは完全に動作します。しかし、私は幅と高さにアクセスできるようにしたいので、正しくHTMLを形成することができるという1つの質問があります。しかし、この情報を引き出すデフォルトはなく、データを格納する方法のために、私はdbに対して追加するとは思えません。

誰にもヒントやアイデアはありますか?それも可能ですか?

答えて

14
class Attachment 
    mount_uploader :file, FileUploader 

    def image 
    @image ||= MiniMagick::Image.open(file.path) 
    end 
end 

そして、このようにそれを使用します。

Attachment.first.image['width'] # => 400 
Attachment.first.image['height'] # => 300 
2

念のために、私はしかし、モンゴGridFSを持つファイルを使用して、同様のソリューションを使用している、ここではそれが行く:

def image 
    @image ||= MiniMagick::Image.read(Mongo::GridFileSystem.new(Mongoid.database).open(file.path, 'r')) 
    end 
0

不利益計算中の画像height/ RMagickまたはMiniMagick実行時:

  • インテンシブそのCPUは、画像を取得し、寸法を計算するためにインターネットを必要とします。
  • そのゆっくりとしたプロセス

画像が完全にjQueryの助けを借りて <img>タグに関連するloadイベントを使用してロードされた後FYIまた画像HeightWidthを計算することができます。

例については

$(document).ready(function(){ 
    var $image = $('.fixed-frame img'); 
    $image.load(function(){ 
     rePositionLogo($image); 
    }); 

    if($image.prop('complete')){ 
    rePositionLogo($image); 
    } 

}); 

function rePositionLogo($image){ 
    var height = $image.height(); 
    var width = $image.width(); 
    if (width > height) { 
    $image.parents('.header').addClass('landscape'); 
    var marginTop = (105 - $image.height())/2; 
    $image.css('margin-top', marginTop + 'px') 
    }else{ 
    $image.parents('.header').addClass('portrait'); 
    } 
} 

画像がすでにロードされたときにload()がトリガされませんので、注意してください。これは、画像がユーザーのブラウザにあるときに簡単に発生する可能性があります。cache

イメージが既にロードされているかどうかは、$('#myImage').prop('complete')を使用して確認できます。$('#myImage').prop('complete')は、イメージがロードされたときにtrueを返します。

関連する問題