Как убедиться, что галерея Android правильно поворачивает изображения, сделанные в моем приложении

Мое приложение делает фотографии, выполняет некоторую обработку и обеспечивает их включение в галерею Android.

У меня проблема в том, что когда я открываю изображения в галерее, они не поворачиваются правильно - хотя изучение данных Exif показывает, что тег ориентации является установлен и кажется правильным. Если я загружу его в инструмент проверки Exif, он скажет что-то вроде «Ориентация: повернуть на 90 по часовой стрелке», но я заметил, что другие приложения, такие как GIMP, также, похоже, пропускают данные Exif, поэтому мне интересно, что-то не так с данные, как я их храню.

Мой код ориентации Exif написан так:

    private void writeOrientation(int orientation, String path) {
        try {
            int exifOrientation = ExifInterface.ORIENTATION_NORMAL;
            if (45 < orientation) {
                if (orientation <= 135) {
                    exifOrientation = ExifInterface.ORIENTATION_ROTATE_90;
                } else if (orientation <= 225) {
                    exifOrientation = ExifInterface.ORIENTATION_ROTATE_180;
                } else {
                    exifOrientation = ExifInterface.ORIENTATION_ROTATE_270;
                }
            }
            ExifInterface exif = new ExifInterface(path);
            exif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(exifOrientation));
            exif.saveAttributes();
        } catch (Exception e) {
            Log.w(TAG, "Failing to write orientation: " + e.getMessage());
            Log.getStackTraceString(e);
        }
    }

Кажется, это работает - в моем собственном коде я поворачиваю изображение в соответствии с его ориентацией, и оно выглядит нормально. Но в галерее все мои портретные изображения по-прежнему отображаются в виде пейзажей.

Использует ли галерея данные Exif для поворота изображений? Если нет, есть ли что-то еще, что он использует, или я должен просто перезаписать изображение повернутой версией? Как я могу убедиться, что галерея и другие приложения, в которые загружены мои изображения, имеют все необходимое для их отображения в правильной ориентации?

3
0
98
2

Ответы 2

Хороший вопрос.

If orientation is saved into file but doesn't appear in the gallery it may be because of orientation is cached in MediaStore. So you need to try to update this information there also.

Ссылка - https://stackoverflow.com/a/22371344/9640177

При этом я бы сказал, что некоторые приложения могут не реализовывать интерфейс Exif, и в этом случае было бы лучше переопределить изображение с повернутой версией.

В моем случае разочаровывающим решением является то, что я полный идиот. Я загружал изображения, используя данные Exif для их поворота, обновлял и сохранял с сохраненными данными Exif. Часть этого процесса, которую я пропустил, заключалась в том, что я сохранял их повернутыми, поэтому портретные изображения теперь были в правильной ориентации без поворота, а затем данные Exif давали команду галерее повернуть их.

Иногда (почти всегда) проблема заключается в том, что система выполняет именно то, что вы ей поручили.

Другие вопросы по теме