Exif данные TAG_ORIENTATION всегда 0 - PullRequest
24 голосов
/ 07 апреля 2011

Мне нужно знать ориентацию изображения из галереи (снято камерой). Мой первоначальный подход состоял в том, чтобы использовать MediaStore.Images.Media.ORIENTATION, который работал для моего Droid 1. Во время тестирования на HTC Thunderbolt этот телефон сохраняет только 0 в этом поле.

Затем я перешел к чтению данных exif:

 ExifInterface exifReader = new ExifInterface(mFilePath);
 exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);

Это также возвращает 0 для каждого изображения. У кого-нибудь есть идеи, как правильно получить ориентацию фотографии, сделанной на андроиде?

Ответы [ 3 ]

28 голосов
/ 03 августа 2011

Вот код, который я использовал onActivityResult () в своей деятельности. Возвращаемое намерение было для выбора изображения типа image / *. Хорошо работает для меня!

Uri imageUri = intent.getData();
String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
Cursor cur = managedQuery(imageUri, orientationColumn, null, null, null);
int orientation = -1;
if (cur != null && cur.moveToFirst()) {
    orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
}  
Matrix matrix = new Matrix();
matrix.postRotate(orientation);
5 голосов
/ 14 апреля 2011

Мое решение:

Удалите все проверки ориентации из данных EXIF. Я не смог найти ни одного случая, где это было бы точно.

Используйте стандарт String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};, чтобы получить ориентацию.

Если это 0 используйте decodeStream ...

if(o.outHeight > o.outWidth){
  //set orientation to portrait
}

иначе это пейзаж

3 голосов
/ 14 января 2012

Я обнаружил ошибку, которая была связана с другой ошибкой Android .. Я нашел разумное решение, опубликованное здесь https://stackoverflow.com/a/8864367/137404

...