下面您將看到一張來自土耳其的名爲「simit」的美麗糕餅圖片。它取自iPad 2,因此它是尺寸爲720 * 960的JPEG。javax.imageio.ImageIO是否損壞?它以旋轉的方式輸入一些圖像
的問題是,當我使用javax.imageio.ImageIO.read
方法,所述圖像它奇怪進口是一個BufferedImage
旋轉到左和變960 * 720。
我在OS X上的Sun JVM 1.6.0_29和Debian上的Sun JVM 1.6.0_26上重現了這一點。下面的代碼:
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
,當我保存這個輸出圖像,它就像我之前告訴旋轉到左邊。如果你想從here重現此,下載代碼和圖片,並運行下面的命令來構建和運行:
javac Main.java && java Main
注:您可能會看到JPG作爲已經旋轉的檔案,但它似乎在OS X,iPad,iPhone上的720 * 960,正如您在上面看到的,它會正確上傳到imgur.com。它也在Adobe Photoshop中正確打開,正確上傳到Facebook等。
這裏有什麼問題?
你可能是對的。我剛剛從一些Exif查看器中確認它http://regex.info/exif.cgi然而,Apache Sanselan明確指出它不支持JPEG。對ImageIO感到羞恥,仍在尋找解決方案。 – 2012-02-26 15:10:06
隨着Sanselan,你可以閱讀EXIF的方向信息,然後旋轉你用ImageIO讀過的位圖。當然,一個集成的解決方案會更好,但我找不到任何是純Java的...總是有jMagick,如果JNI庫是好的 – 2012-02-26 16:34:34
http://stackoverflow.com/questions/5905868/ami-i-making-this-too-complicated-image-rotation – 2012-02-26 17:07:09