2012-05-02 15 views
16

कुछ हद तक अस्पष्ट शीर्षक के लिए माफ़ी, मैं काम नहीं कर सकता कि कीवर्ड क्या हैं। सेटअप काफी सरल है, मैंImageIO.read अवैध तर्क अपवाद - रास्टर बैंड/रंग अंतरिक्ष घटक?

ImageIO.read(new File(filename)); 

यह सबसे फ़ाइलों के लिए काम करता है के साथ एक छवि को खोलने रहा हूँ, लेकिन एक के लिए मैं एक IllegalArgumentException with the detail: "numbers of source Raster bands and source color space components do not match" मिलता है। यह छवि एक वैध फ़्लिकर यूआरएल पर wget के माध्यम से प्राप्त की गई थी, और मैंने इस तरह से प्राप्त अन्य छवियों का उपयोग किया है, इसलिए छवियों को प्राप्त करने की विधि सिद्धांत रूप में ध्वनि प्रतीत होती है। मुझे यकीन नहीं है कि अपवाद का कारण क्या है।

एक कामकाज स्वीकार्य से अधिक होगा - मैं विशेष रूप से ImageIO का उपयोग करने के साथ परेशान नहीं हूं, और छवि दृश्यमान दिखती है। मुझे जावा फ्रेकिंग के बिना इसे पढ़ने की जरूरत है!

यहाँ विचाराधीन छवि है, के मामले में यह किसी काम के है:

enter image description here

+0

मैं एक ही त्रुटि मिलती है। क्या यह एकमात्र बी/डब्ल्यू छवि है जिसे आप संसाधित कर रहे हैं? –

+0

कहना मुश्किल है - छवि पुनर्प्राप्ति प्रक्रिया की प्रकृति बहुत अप्रत्यक्ष है (विचार यह है कि सॉफ्टवेयर स्वायत्त है!) हालांकि यह कम संतृप्ति वाला एकमात्र ऐसा है। क्या आपको लगता है कि यही कारण है? – mtrc

+0

क्या आपको इसके लिए कोई समाधान मिला है? –

उत्तर

11

तो मैं इस एक ही मुद्दा हो रही थी और और पाया कि डिफ़ॉल्ट ImageIO.read कार्यान्वयन कि छवि थी ग्रे पैमाने यह पता नहीं लगा रहा था क्योंकि छवि मेटाडाटा काफी उम्मीद नहीं थी। मैंने एक काम लिखा है जो भार को 'BufferedImage.TYPE_BYTE_GRAY' के रूप में पुनः लोड करता है यदि यह मुख्य लोड में विफल रहता है।

  Iterator<ImageReader> iter = ImageIO.getImageReaders(stream); 

     Exception lastException = null; 
     while (iter.hasNext()) { 
      ImageReader reader = null; 
      try { 
       reader = (ImageReader)iter.next(); 
       ImageReadParam param = reader.getDefaultReadParam(); 
       reader.setInput(stream, true, true); 
       Iterator<ImageTypeSpecifier> imageTypes = reader.getImageTypes(0); 
       while (imageTypes.hasNext()) { 
        ImageTypeSpecifier imageTypeSpecifier = imageTypes.next(); 
        int bufferedImageType = imageTypeSpecifier.getBufferedImageType(); 
        if (bufferedImageType == BufferedImage.TYPE_BYTE_GRAY) { 
         param.setDestinationType(imageTypeSpecifier); 
         break; 
        } 
       } 
       bufferedImage = reader.read(0, param); 
       if (null != bufferedImage) break; 
      } catch (Exception e) { 
       lastException = e; 
      } finally { 
       if (null != reader) reader.dispose();    
      } 
     } 
     // If you don't have an image at the end of all readers 
     if (null == bufferedImage) { 
      if (null != lastException) { 
       throw lastException; 
      } 
     } 
+1

एसओ की सुंदरता: एक समस्या यह है कि मुझे दो घंटे ले लिया होता यह पता लगाने की अब 10 मिनट लगते हैं। धन्यवाद, टेट मूर। – charleslparker

+0

अद्भुत सामान! कभी सोचा नहीं कि कोई भी वापस आ जाएगा और इसे नीचे दबाएगा लेकिन आपने किया! लवली सामान – mtrc

+0

जब मैं इस समाधान का उपयोग करने के बाद यह ImageIO.read (InputStream) के साथ विफल रहता है यह कोड के बाकी पर अमल नहीं करता है (जबकि (iter.hasNext()) गलत है), लेकिन अगर मैं छोड़ ImageIO.read (InputStream) यह हिस्सा नौकरी करता है मेरे कोड में क्या गलत है? – user1052958

4

त्रुटि संदेश जानकारीपूर्ण है और इंगित करता है कि आईसीसी रंग प्रोफाइल में उल्लिखित रास्टर बैंड की संख्या गलत है। मैंने छवि से आईसीसी प्रोफाइल को पट्टी करने के लिए ImageMagick का उपयोग किया। छवियों को बाद में छवियों को पढ़ने में कोई समस्या नहीं है (~ 1k खराब छवियां)। उम्मीद है की वो मदद करदे।

+0

यह किया था! धन्यवाद। मुझे निश्चित रूप से लगता है कि संदेश सूचनात्मक है, यह मेरी समझ की स्तर से ऊपर है, न कि उनकी गलती। टिप्पणी के लिए धन्यवाद :) – mtrc

1

बारहोनकी छवियों का उपयोग करके इस छवि को पढ़ना संभव है, जो जेआरई द्वारा प्रदान की गई मूल छवि के लिए एक अधिक मजबूत और क्षमा करने वाला प्रतिस्थापन है।

https://github.com/haraldk/TwelveMonkeys/

मैं पीडीएफ बॉक्स Jira https://issues.apache.org/jira/browse/PDFBOX-3637

में इस समाधान पाया आदेश twelvemonkeys उपयोग करने के लिए देखें, यह एक Maven निर्भरता के रूप में इसे जोड़ने के लिए पर्याप्त है। यह फिर डिफ़ॉल्ट छवि प्रोसेसर से पहले खुद को पंजीकृत करता है। (कम से कम जब `ImageIO.read (नया URL (" http://i.imgur.com/rC6Jk.jpg ")) का उपयोग;`)

<dependency> 
    <groupId>com.twelvemonkeys.imageio</groupId> 
    <artifactId>imageio-jpeg</artifactId> 
    <version>3.3.2</version> <!-- Alternatively, build your own version --> 
</dependency> 
संबंधित मुद्दे