2010-12-15 8 views
5

bulmakta.Carrierwave ve mini_magick benim yeni rail3 uygulamasında bir ben Carrierwave kullanmaya karar soruşturmanın bit ve mini_magick sonra genişlikleri ve yüksekliğini

bunu kurdum ve mükemmel çalışıyor. Ancak bir sorum var, genişliğe ve yüksekliğe erişebilmek istiyorum, bu yüzden html'yi doğru şekilde oluşturabilirim. Ancak bu bilgiyi çekmek için bir öntanım yoktur ve veriyi sakladığından dolayı db'ye ekleyebileceğimi düşünmüyorum.

Herhangi bir ipucu veya fikri olan var mı? Bu mümkün mü?

cevap

14
class Attachment 
    mount_uploader :file, FileUploader 

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

Ve bu gibi kullanmak:

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

Sadece kayıt için, ben ancak Mongo GridFS ile dosyalarını kullanarak, benzer bir çözüm kullandık, burada o da:

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

Çalışma zamanında /width numaralı RMagick veya MiniMagick kullanılarak hesaplamanın dezavantajı:

  • Onun
  • yoğun CPU Bu görüntü alma ve boyutlarını hesaplamak için interneti gerektirir.
  • Onun yavaş bir süreç Bilginize Ayrıca Görüntü sonra Image Height, Width hesaplayabilirsiniz

tamamen jQuery yardımıyla <img> etiketle ilişkili load olayı kullanılarak yüklenir. Örnek için

: Bir görüntü zaten yüklendiğinde load() tetiklemez çünkü

$(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'); 
    } 
} 

, dikkatli olun. Bu, kullanıcının tarayıcısında cache görüntüdeyken kolayca gerçekleşebilir. Bir görüntü zaten bir görüntü yüklendiğinde true döndüren $('#myImage').prop('complete') kullanılarak yüklü ise

kontrol edebilirsiniz.

İlgili konular