2012-02-26 18 views
6

घूर्णन के रूप में कुछ छवियों को आयात करता है नीचे आप तुर्की से "simit" नामक प्यारी पेस्ट्री की एक तस्वीर देखेंगे। इसे आईपैड 2 से लिया जाता है, इसलिए यह आयाम 720 * 960 के साथ एक जेपीईजी है।क्या javax.imageio.ImageIO टूटा हुआ है? यह

Picture from iPad 720x960

समस्या यह है, जब मैं javax.imageio.ImageIO.read विधि, छवि यह अजीब आयात का उपयोग करने के लिए एक है BufferedImage छोड़ दिया घुमाया और 960 * 720 हो जाता है।

मैंने इसे डेबियन पर ओएस एक्स और सन जेवीएम 1.6.0_26 पर अपने सूर्य जेवीएम 1.6.0_29 में पुन: उत्पन्न किया।

public class Main { 
    public static void main(String[] args) throws Exception { 
     FileInputStream stream = new FileInputStream(new File("IMG_0159.JPG")); 
     BufferedImage img = ImageIO.read(stream); 
     System.out.println("width:" + img.getWidth() + " height:" 
       + img.getHeight()); 
    } 
} 

यह width:960 height:720 आउटपुट, और जब मैं इस उत्पादन छवि बचाने के लिए, उसे छोड़ दिया करने के लिए घुमाया जाता है के रूप में मैं पहले कहा: यहाँ कोड है। , आप संग्रह के रूप में पहले से ही घुमाया में जेपीजी देख सकते हैं, लेकिन यह प्रकट होता है:

javac Main.java && java Main 

नोट: यदि आप का निर्माण और चलाने के लिए here से, डाउनलोड कोड और चित्र पुन: पेश और निम्न कमांड को चलाने के लिए चाहते हैं, तो ओएस एक्स, आईपैड, आईफोन पर 720 * 960 और जैसा कि आप ऊपर देखते हैं, यह imgur.com पर सही तरीके से अपलोड किया गया है। और यह एडोब फोटोशॉप में भी सही ढंग से खोला गया है, फेसबुक पर सही तरीके से अपलोड किया गया है।

यहां समस्या क्या हो सकती है?

उत्तर

9

तस्वीर शायद आईपैड को पोर्ट्रेट मोड में ले जाया गया था, और इसलिए EXIF ​​ओरिएंटेशन जानकारी शामिल है, जो ImageIO अनदेखा करता है, लेकिन आप अपाचे संसलन जैसे अन्य पुस्तकालयों का सही ढंग से इसे संभालने के लिए उपयोग कर सकते हैं।

तो छवि स्वयं 960x720 है, लेकिन मैकोज़, इम्गुर, फेसबुक इत्यादि सही ढंग से EXIF ​​जानकारी को खाते में ले जाती हैं।

और सिमिट स्वादिष्ट लग रहा है :)

+0

आप शायद सही हैं। मैंने अभी कुछ एक्सिफ़ व्यूअर http://regex.info/exif.cgi से इसकी पुष्टि की है हालांकि अपाचे संसलन स्पष्ट रूप से बताता है कि यह जेपीईजी का समर्थन नहीं करता है। ImageIO पर शर्म, अभी भी एक समाधान की तलाश में है। –

+0

सांसेलन के साथ आप EXIF ​​ओरिएंटेशन जानकारी पढ़ सकते हैं, और उसके बाद छविमैट के साथ पढ़े गए बिटमैप को घुमाएं .. बेशक एक एकीकृत समाधान बेहतर होगा, लेकिन मुझे कोई भी शुद्ध जावा नहीं मिला ... जेएनआई अगर हमेशा जेएमआईजी होता है पुस्तकालय ठीक हैं –

+1

http://stackoverflow.com/questions/5905868/am-i-making-this-too-complicated-image-rotation –

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