2009-07-22 12 views
5

मेरे पास एक है: xxx छवि प्रोसेसर, और मेरे पास मॉडल में दो शैलियों हैं: बड़ा और: अंगूठे।चयनित शैली पर पेपरक्लिप रन प्रोसेसर

मैं कैसे संसाधित कर सकता हूं: xxx केवल: अंगूठे की छवि छोड़कर: बड़ी छवि छूटी हुई?

उत्तर

1

डिफ़ॉल्ट रूप से, रेक कार्य सभी थंबनेल को रीफ्रेश करता है। ध्यान रखें कि यह मूल छवि को स्पर्श/संसाधित नहीं करेगा।

आपके पास look at the Rakefile और Attachment कक्षा हो सकती है और आपको एक विशिष्ट थंबनेल आकार निर्दिष्ट करने की अनुमति देने के लिए संशोधित किया जा सकता है, लेकिन वर्तमान डिज़ाइन मानता है कि आप मूल लेना चाहते हैं और सभी थंबनेल को मूल से फिर से लेना चाहते हैं।

+0

और क्या केवल दूसरों को छोड़ने के लिए अंगूठे की छवि को फसल करने का कोई अन्य विकल्प है? मेरा मतलब अटैचमेंट क्लास को संशोधित किए बिना है? शायद मॉडल/नियंत्रक में कुछ अतिरिक्त कोड? – astropanic

0

मैंने इसे कूल्ड किया - यह सुरुचिपूर्ण नहीं है, लेकिन यह मेरे लिए काम करता है।

आपकी शैलियों में से एक के सभी अन्य शैलियों से आयाम अलग होना चाहिए। इस तरह, आपके कस्टम पेपरक्लिप प्रोसेसर में, आप देख सकते हैं कि कमांड स्ट्रिंग की सामग्री में दिए गए आयाम हैं या नहीं। यदि ऐसा है तो आप विशेष प्रसंस्करण करेंगे, यदि नहीं, तो आप नहीं करेंगे।

(मैं इस कोड को काटा गया है - और यह संशोधित - रयान बाते के Railscast प्रकरण 182. से)

module Paperclip 
    class Cropper < Thumbnail 
    def transformation_command 
     SPECIAL_PROCESSING_FLAG = "150x150" 
     if crop_command && super.include?(SPECIAL_PROCESSING_FLAG) 
     crop_command + super.sub(/ -crop \S+/, '') 
     else 
     super 'do nothing fancy 
     end 
    end 

    def crop_command 
     target = @attachment.instance 
     if target.cropping? 
     " -crop '#{target.crop_w.to_i}x#{target.crop_h.to_i}+#{target.crop_x.to_i}+#{target.crop_y.to_i}'" 
     end 
    end 
    end 
end 

मेरी स्थिति में यह मामला नहीं था कि हम भी गैर विशेष मामले में फिर से प्रोसेस, चूंकि अंतिम परिणाम कुछ भी नहीं बदला।

18

मुझे हाल ही में एक ही समस्या थी और यह संदेश संदेश बोर्ड पर मिला। आशा करता हूँ की ये काम करेगा!

has_attached_file :screenshot, 
:default_style => :full, 
:styles => { 
    :full => "280x210", 
    :cropped => { :processors => [:screenshot_crop] } 
} 
+0

टिप के लिए धन्यवाद! ऐसा लगता है कि आपको वैसे भी 'ज्यामिति' पैरामीटर प्रदान करना चाहिए - ': फसल => {: ज्यामिति => 'जो भी',: प्रोसेसर => [: स्क्रीनशॉट_crop]} 'अन्यथा यह शून्य के लिए' अपरिभाषित विधि \ '[]' देता है: NilClass'। – jibiel

1

अपने paperclip.rake फाइल करने के लिए इस कोड जोड़ें:

desc "Reprocesses your attachments style (set CLASS, ATTACHMENT and STYLE)" 
    task :style => :environment do 
     module JustForOneDay 
     NAME = ENV['STYLE'] 
     end 

     module ::Paperclip 
     class Attachment 
      def post_process_styles #:nodoc: 
      @styles.each do |name, args| 
       if JustForOneDay::NAME == name 
       begin 
        raise RuntimeError.new("Style #{name} has no processors defined.") if args[:processors].blank? 
        @queued_for_write[name] = args[:processors].inject(@queued_for_write[:original]) do |file, processor| 
        Paperclip.processor(processor).make(file, args, self) 
        end 
       rescue PaperclipError => e 
        log("An error was received while processing: #{e.inspect}") 
        (@errors[:processing] ||= []) << e.message if @whiny 
       end 
       end 
      end 
      end 
     end 
     end 

     for_all_attachments do |instance, name| 
     result = instance.send(name).reprocess! 
     end 
    end 
    end 

पेपरक्लिप साथ परीक्षण किया गया 2.3.1.1

पेपरक्लिप 2.3.3 में यह होना चाहिए:

def post_process_styles #:nodoc: 
    styles.each do |name, style| 
    if JustForOneDay::NAME == name 
    begin 
     raise RuntimeError.new("Style #{name} has no processors defined.") if style.processors.blank? 
     @queued_for_write[name] = style.processors.inject(@queued_for_write[:original]) do |file, processor| 
     Paperclip.processor(processor).make(file, style.processor_options, self) 
     end 
    rescue PaperclipError => e 
     log("An error was received while processing: #{e.inspect}") 
     (@errors[:processing] ||= []) << e.message if @whiny 
    end 
    end 
    end 
end 

यह आसान है, बस अपने पेपरक्लिप संस्करण में attachment.rb फ़ाइल पर जाएं।

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