2012-01-13 12 views
7

कैरियरवेव के वर्तमान उदाहरण की चौड़ाई और ऊंचाई कैसे प्राप्त कर सकता हूं?कैरियरवेव छवि आयाम

कुछ इस तरह:

car_images.each do | image| 
    image_tag(image.photo_url, :width => image.photo_width, :height => image.photo_height) 
end 

दुर्भाग्य image.photo_width और image.photo_height काम नहीं कर रहे। मुझे छवियों की चौड़ाई और ऊंचाई निर्दिष्ट करने की आवश्यकता है, यह उपयोग की जा रही jquery प्लगइन पर आवश्यक है। यदि Rmagick का उपयोग कर काफी आसानी से

class Image 
    before_save :update_image_attributes 

    private 

    def update_image_attributes 
    if image.present? 
     self.content_type = image.file.content_type 
     self.file_size = image.file.size 
     self.width, self.height = `identify -format "%wx%h" #{image.file.path}`.split(/x/) 
     # if you also need to store the original filename: 
     # self.original_filename = image.file.filename 
    end 
    end 
end 

उत्तर

13

कम्बाइन https://github.com/jnicklas/carrierwave/wiki/How-to:-Get-version-image-dimensions और https://github.com/jnicklas/carrierwave/wiki/How-to:-Store-the-uploaded-file-size-and-content-type और आप मिलता है। Carrierwave अपलोड करने वाले में:

class ArtworkUploader < CarrierWave::Uploader::Base 

    def geometry 
    @geometry ||= get_geometry 
    end 

    def get_geometry 
    if @file 
     img = ::Magick::Image::read(@file.file).first 
     geometry = { width: img.columns, height: img.rows } 
    end 
    end 

end 

और अपने मॉडल में:

class Artwork < ActiveRecord::Base 

    mount_uploader :image, ArtworkUploader 

    before_save :save_image_dimensions 

    private 

    def save_image_dimensions 
     if image_changed? 
     self.image_width = image.geometry[:width] 
     self.image_height = image.geometry[:height] 
     end 
    end 
end 
11

आप अपने मॉडल के साथ ऊंचाई विशेषताओं के रूप में चौड़ाई बचा सकते हैं:

+2

यह नए अपलोड ('image_changed? == true') के लिए काम करता है लेकिन मौजूदा अनुलग्नकों के आयामों को मापने के बारे में क्या है? मैं कंसोल से 'get_geometry' विधि तक पहुंच नहीं पा रहा हूं। मुझे # 'कैरियरवेव :: स्टोरेज :: फॉग :: फ़ाइल: 0x00000005225b28> '" के लिए बुलाया गया "निजी विधि' फ़ाइल मिल रही है। –

0

@ JamieD का जवाब मेरे लिए काम किया, एक अपवाद के साथ। मैं मिनीमैजिक का उपयोग कर रहा था।

तो मैंने अपने अपलोडर को ऐसा कुछ जोड़ा।

def geometry 
    @geometry ||= get_geometry 
end 

def get_geometry 
    if @file 
    img = ::Magick::Image::read(@file.file).first 
    geometry = { width: img.columns, height: img.rows } 
    end 
end 
+0

मैंने https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Get-image- MiniMagick जानकारी के साथ आयाम अपडेट किया है। –

1

या बस FastImage का उपयोग करें। यह अनुलग्नक को पीछे से मापने के लिए बहुत आसान बनाता है।

संबंधित मुद्दे