2011-11-03 17 views
5

कनवर्ट करें I Carrierwave एक छवि के कुछ संस्करणों, एक पीएनजी प्रारूप में, और एक जेपीजी प्रारूप में, लेकिन मुझे इसे काम करने के लिए प्रतीत नहीं होता है। मुझे एहसास है कि यहां और अन्य जगहों पर कई समान प्रश्न पूछे गए हैं, लेकिन मैं समाधान ढूंढने में विफल रहा हूं। मोटे तौर पर, यहाँ मैं क्या है: एक jpg.jpg नाम दिया, और एक png.png नामित:कैरियरवेव के साथ समस्या:

class MyUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 

    version :jpeg do 
    process :convert => 'jpg' 
    # more procesors 
    process :processed => :jpg 
    end 

    version :png do 
    process :convert => 'png' 
    # more processors 
    process :processed => :png 
    end 

    def store_path(for_file = filename) 
    if version_name != :png 
     return "#{version_name}.jpg" 
    else 
     return "#{version_name}.png" 
    end 
    end 

    def filename 
    filename = if version_name != :png 
     super != nil ? super.split('.').first + '.jpg' : super 
    else 
     super != nil ? super.split('.').first + '.png' : super 
    end 
    end 

end 

तो, छवि प्रारूप मैं में पारित के प्रकार की परवाह किए बिना, इस दो फ़ाइलों पैदा करता है। jpg.jpg वास्तव में हमेशा एक जेपीईजी फ़ाइल है (जैसा कि यूनिक्स के file कमांड के साथ सत्यापित किया गया है), लेकिन png.png केवल एक वास्तविक पीएनजी फॉर्मेटेड फ़ाइल है, और केवल अगर मैं मूल रूप से एक पीएनजी-फॉर्मेटेड फ़ाइल में पास करता हूं (जेपीजी स्वरूपित फ़ाइल में जेपीईजी परिणाम में गुजरता है) !

विचार?

यह उपयोगी नहीं हो सकता है, लेकिन मैं Carrierwave ही संदिग्ध में convert विधि पाते हैं: convert(some_format) कॉल manipulate!(:format => some_format), जो बारी में कॉल (some_image_object).write("#{some_format}:#{current_path}")। अब अगर मूल छवि में पास किया गया है bla.format (format = jpg, png, आदि), current_path के साथ .format का विस्तार है (manipulate! पर एक बंदर-पैच के माध्यम से परीक्षण किया गया है)। और जिस तरह से छवि प्रारूप रूपांतरण RMagick में काम करता है वांछित एक्सटेंशन वाले तर्क के साथ write पर कॉल करके है। तो वास्तव में जेपीजी रूपांतरण वास्तव में क्यों होगा? और यदि हां, तो पीएनजी रूपांतरण क्यों विफल हो जाएगा?

इसके अलावा, अगर यह उपयोगी है, मैं ऑन रेल्स 3.0.9 और 0.5.6 Carrierwave

धन्यवाद हूँ!

उत्तर

5

तो मुझे यकीन है कि क्यों यह मामला है नहीं कर रहा हूँ, लेकिन यह पता चला है कि समस्या png संस्करण है जो मैं ऊपर छुपाया की # more processors भाग में है। उन्हें संस्करण से छोड़कर किसी भी इनपुट प्रकार के लिए वास्तविक पीएनजी फ़ाइल की ओर जाता है। ये प्रोसेसर manipulate! पर कॉल करते हैं और कुछ सामान करते हैं। इसके बजाय फिक्स को manipulate!(:format => 'png') पर कॉल करने के बजाय किया गया था। वाह।

+0

धन्यवाद, आपने मेरी रात –

+1

बचाई है कोई भी इस जवाब को देखकर इसे पढ़ सकता है: http://stackoverflow.com/questions/19625066/carrierwave-rmagick-not-removing-transparency-in-convert-to-jpg – JakeTheSnake

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