2009-12-09 11 views
10

मैं पेपरक्लिप के साथ छवि अभिविन्यास को निर्धारित करने का एक तरीका ढूंढ रहा हूं, लेकिन क्या यह भी संभव है या मुझे इसके लिए उपयोगकर्ता RMagick या किसी अन्य छवि लाइब्रेरी की आवश्यकता है?पेपरक्लिप के साथ छवि अभिविन्यास और सत्यापन?

केस परिदृश्य: जब कोई उपयोगकर्ता कोई छवि अपलोड करता है तो मैं यह निर्धारित करने के लिए अभिविन्यास/आकार/आयामों को देखना चाहता हूं कि छवि चित्र/परिदृश्य या वर्ग में है या इस विशेषता को मॉडल में सहेजें।

उत्तर

11

यहां मैं आमतौर पर अपने छवि मॉडल में क्या करता हूं। शायद यह मदद करेगा:

  • मैं कनवर्ट करते समय आईएम के-ऑटो-ओरिएंट विकल्प का उपयोग करता हूं। यह सुनिश्चित करता है छवियों को हमेशा अपलोड करने के बाद ठीक से घूम जाते हैं
  • मैं प्रसंस्करण के बाद EXIF data पढ़ सकते हैं और (अन्य बातों के अलावा) चौड़ाई और ऊंचाई पाने
  • आप तो बस एक उदाहरण विधि है कि चौड़ाई और ऊंचाई के आधार पर एक उन्मुखीकरण स्ट्रिंग आउटपुट हो सकता है
has_attached_file :attachment, 
    :styles => { 
    :large => "900x600>", 
    :medium => "600x400>", 
    :square => "100x100#", 
    :small => "300x200>" }, 
    :convert_options => { :all => '-auto-orient' }, 
    :storage => :s3, 
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
    :s3_permissions => 'public-read', 
    :s3_protocol => 'https', 
    :path => "images/:id_partition/:basename_:style.:extension" 

after_attachment_post_process :post_process_photo 

def post_process_photo 
    imgfile = EXIFR::JPEG.new(attachment.queued_for_write[:original].path) 
    return unless imgfile 

    self.width   = imgfile.width    
    self.height  = imgfile.height    
    self.model   = imgfile.model    
    self.date_time  = imgfile.date_time   
    self.exposure_time = imgfile.exposure_time.to_s 
    self.f_number  = imgfile.f_number.to_f  
    self.focal_length = imgfile.focal_length.to_s 
    self.description = imgfile.image_description 
end 
+1

कॉलबैक नहीं है जिसे 'after_post_process' कहा जाता है? –

+0

यह 'after_attachment_post_process' है क्योंकि पेपरक्लिप आपको अपने मॉडल में प्रत्येक अनुलग्नक के लिए पोस्ट प्रोसेसर घोषित करने की अनुमति देता है। आप इसे 'after_ATTACHMENT-NAME_post_process' घोषित करके करते हैं। तो अगर उसके अनुलग्नक को 'मीडिया' कहा जाता है, तो उसका पोस्ट प्रोसेसर 'after_media_post_process' होगा। – Joseph

+0

आप संभवतया 'source_file_options: {all:' -auto-orient '} का उपयोग 'convert_options' के बजाय करना चाहते हैं: क्योंकि यह विभिन्न शैलियों को उत्पन्न करने से पहले यातायात करता है और आपकी शैलियों में अपेक्षित छवि आकार का उत्पादन करेगा। –

1

जब मैं अपने कैमरे के साथ एक फोटो लेता हूं तो छवि के आयाम समान हैं भले ही फोटो लैंडस्केप या पोर्ट्रेट हो। हालांकि, मेरा कैमरा मेरे लिए छवि को घुमाने के लिए पर्याप्त स्मार्ट है! कितना विचारपूर्ण! इस काम का तरीका यह है कि exif data नामक कुछ का उपयोग किया जाता है जो कैमरे द्वारा छवि पर मेटा डेटा रखा जाता है। ऐसा लगता है कि सामान में शामिल हैं: कैमरे के प्रकार, जब फोटो लिया गया था, उन्मुखीकरण आदि ...

पेपरक्लिप आप कॉलबैक सेट कर सकते हैं के साथ, विशेष रूप से आप के लिए करना चाहेंगे क्या before_post_process पर एक कॉलबैक है कि लाइब्रेरी का उपयोग करके एक्सिफ डेटा को पढ़कर छवि के अभिविन्यास की जांच करता है (आप यहां एक सूची पा सकते हैं: http://blog.simplificator.com/2008/01/14/ruby-and-exif-data/), और फिर छवि को घड़ी की दिशा में घुमाएं या घुमावदार 90 डिग्री घुमाएं (आपको पता नहीं चलेगा कि उन्होंने कैमरे को घुमाने पर किस तरह से घुमाया फोटो)।

मुझे आशा है कि इससे मदद मिलती है!

+0

मैं इस में देखा और यह भी एक महान समाधान है, हालांकि इस समय छवि अपलोड उपयोगकर्ताओं के द्वारा कर रहे हैं और मैं वास्तव में सही ढंग से छवियों को अपलोड करने की क्षमता पर भरोसा नहीं करते। –

5

उत्तर जोननी के लिए धन्यवाद।

हालांकि मुझे पेपरक्लिप :: ज्यामिति मॉड्यूल में जो खोजा गया था, उसे मिला।

class Image < ActiveRecord::Base 
    after_save :set_orientation 

    has_attached_file :data, :styles => { :large => "685x", :thumb => "100x100#" } 
    validates_attachment_content_type :data, :content_type => ['image/jpeg', 'image/pjpeg'], :message => "has to be in jpeg format" 

    private 
    def set_orientation 
    self.orientation = Paperclip::Geometry.from_file(self.data.to_file).horizontal? ? 'horizontal' : 'vertical' 
    end 
end 
निश्चित रूप से

यह बनाता है दोनों ऊर्ध्वाधर और वर्ग छवियों खड़ी विशेषता है, लेकिन है कि क्या मैं वैसे भी चाहता था:

यह खोजने के लिए काम किया।

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