2011-12-21 19 views
9

ile görüntü yüksekliğinin alınması İşlenen görüntünün boyutlarını koyma yeteneğine ihtiyacım var. Benim ImageUploader sınıftaCarrierWave

Ben

:

version :post do 
    process :resize_to_fit => [200, nil] 
end 

Buna benzer resmin boyutlarını alabilir bir yolu var mı?

height = @picture.image_height(:post) 

cevap

12

: http://code.dblock.org/carrierwave-saving-best-image-geometry

It Bir süreç ekler ve görüntü geometrisini getirmek için Magick'in yöntemini çağır.

Kodu:

version :post do 
    process :resize_to_fit => [200, nil] 
    process :get_geometry 

    def geometry 
     @geometry 
    end 
    end 

    def get_geometry 
    if (@file) 
     img = ::Magick::Image::read(@file.file).first 
     @geometry = [ img.columns, img.rows ] 
    end 
    end 
+1

+1 Bu yöntem çok daha temiz ve RMagick tarafından önerilene benzer Burada: http://www.imagemagick.org/RMagick/doc/comtasks.html – iwasrobbed

+0

Burada emin değilim, ama .read yerine (http://stackoverflow.com/a/. 16267106/4738391) –

1

i çevresindeki bazı bir yayında üzerine geldi googled aşağıdaki:

kaynak bağlantı http://groups.google.com/group/carrierwave/browse_thread/thread/c5e93b45bde8a85e?fwc=1&pli=1

class HeaderUploader < CarrierWave::Uploader::Base 
    storage :right_s3 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
    def url 
    ["http://#{s3_bucket}.s3.amazonaws.com/", path].compact.join 
    end 
    before :cache, :capture_size_before_cache 
    before :retrieve_from_cache, :capture_size_after_retrieve_from_cache 
    def capture_size_before_cache(new_file) 
    model.header_width, model.header_height = `identify -format "%wx 
%h" #{new_file.path}`.split(/x/) 
    end 
    def capture_size_after_retrieve_from_cache(cache_name) 
    model.header_width, model.header_height = `identify -format "%wx 
%h" #[email protected]}`.split(/x/) 
    end 
    def dimensions 
    "#{model.header_width}x#{model.header_height}" 
    end 
end 
ayarlayabilir ve yöntem Burada anlatılan kullanabilirsiniz
7

Sen üzerine kanca: önbellek ve: retrieve_from_cache yöntemler

sistemine güvenmek gerek yoktur ya komutları:

# Somewhere in your uploader: 
attr_reader :geometry 
after :cache, :capture_size 
after :retrieve_from_cache, :capture_size 
def capture_size(*args)  
    img = ::MiniMagick::Image::read(File.binread(@file.file)) 
    @geometry = [img[:width], img[:height]] 
end 

http://www.glebm.com/2012/05/carrierwave-image-dimensions.html

+0

Teşekkürler! Cevap olarak işaret edilen çözüm benim için çalışmadı. Güzel ve basit bir çözüm. –

+0

Lütfen bunun en büyük sürümün boyutunu yakalayacağını unutmayın. Birden çok sürüm desteği için https://github.com/gzigzigzeo/carrierwave-meta kullanabilirsiniz (diğer örnekler gibi işlem ekler). Ayrıca bu, muhtemelen sadece header yerine tüm dosya okur 'binread' kullanarak görünmektedir, çünkü çok verimli değil – glebm

İlgili konular