Это javax.imageio.ImageIO сломан? Некоторые изображения импортируются как повернутые

Ниже вы увидите изображение красивой выпечки под названием " simit " из Турции. Взято с iPad 2,следовательно, это JPEG с размерами 720 * 960 .

Picture from iPad 720x960

Проблема в том, что когда я использую метод javax.imageio.ImageIO.read , изображение, которое он странным образом импортирует, оказывается в BufferedImage , повернутом влево и превращающемся в 960 * 720 .

Я воспроизвел это в моей Sun JVM 1.6.0_29 в OS X и Sun JVM 1.6.0_26 в Debian. Вот код:

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

ПРИМЕЧАНИЕ: Вы можете увидеть JPG в архиве как уже повернутый, однако он отображается как 720 * 960 на OS X, iPad, iPhone и, как вы видите выше, правильно загружен на imgur.com. И он также правильно открывается в Adobe Photoshop, правильно загружается в Facebook и т. Д.

В чем может быть проблема?

7
задан AhmetB - Google 26 February 2012 в 13:22
поделиться