मेरे पास एक है: xxx छवि प्रोसेसर, और मेरे पास मॉडल में दो शैलियों हैं: बड़ा और: अंगूठे।चयनित शैली पर पेपरक्लिप रन प्रोसेसर
मैं कैसे संसाधित कर सकता हूं: xxx केवल: अंगूठे की छवि छोड़कर: बड़ी छवि छूटी हुई?
मेरे पास एक है: xxx छवि प्रोसेसर, और मेरे पास मॉडल में दो शैलियों हैं: बड़ा और: अंगूठे।चयनित शैली पर पेपरक्लिप रन प्रोसेसर
मैं कैसे संसाधित कर सकता हूं: xxx केवल: अंगूठे की छवि छोड़कर: बड़ी छवि छूटी हुई?
डिफ़ॉल्ट रूप से, रेक कार्य सभी थंबनेल को रीफ्रेश करता है। ध्यान रखें कि यह मूल छवि को स्पर्श/संसाधित नहीं करेगा।
आपके पास look at the Rakefile और Attachment कक्षा हो सकती है और आपको एक विशिष्ट थंबनेल आकार निर्दिष्ट करने की अनुमति देने के लिए संशोधित किया जा सकता है, लेकिन वर्तमान डिज़ाइन मानता है कि आप मूल लेना चाहते हैं और सभी थंबनेल को मूल से फिर से लेना चाहते हैं।
मैंने इसे कूल्ड किया - यह सुरुचिपूर्ण नहीं है, लेकिन यह मेरे लिए काम करता है।
आपकी शैलियों में से एक के सभी अन्य शैलियों से आयाम अलग होना चाहिए। इस तरह, आपके कस्टम पेपरक्लिप प्रोसेसर में, आप देख सकते हैं कि कमांड स्ट्रिंग की सामग्री में दिए गए आयाम हैं या नहीं। यदि ऐसा है तो आप विशेष प्रसंस्करण करेंगे, यदि नहीं, तो आप नहीं करेंगे।
(मैं इस कोड को काटा गया है - और यह संशोधित - रयान बाते के 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
मेरी स्थिति में यह मामला नहीं था कि हम भी गैर विशेष मामले में फिर से प्रोसेस, चूंकि अंतिम परिणाम कुछ भी नहीं बदला।
मुझे हाल ही में एक ही समस्या थी और यह संदेश संदेश बोर्ड पर मिला। आशा करता हूँ की ये काम करेगा!
has_attached_file :screenshot,
:default_style => :full,
:styles => {
:full => "280x210",
:cropped => { :processors => [:screenshot_crop] }
}
टिप के लिए धन्यवाद! ऐसा लगता है कि आपको वैसे भी 'ज्यामिति' पैरामीटर प्रदान करना चाहिए - ': फसल => {: ज्यामिति => 'जो भी',: प्रोसेसर => [: स्क्रीनशॉट_crop]} 'अन्यथा यह शून्य के लिए' अपरिभाषित विधि \ '[]' देता है: NilClass'। – jibiel
अपने 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 फ़ाइल पर जाएं।
और क्या केवल दूसरों को छोड़ने के लिए अंगूठे की छवि को फसल करने का कोई अन्य विकल्प है? मेरा मतलब अटैचमेंट क्लास को संशोधित किए बिना है? शायद मॉडल/नियंत्रक में कुछ अतिरिक्त कोड? – astropanic