Данные Exif TAG_ORIENTATION всегда 0

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

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

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

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

Ответ 1

Мое решение:

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

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

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

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

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

Ответ 2

Вот код, который я использовал 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);

Ответ 3

Я обнаружил ошибку, связанную с другой ошибкой Android. Я нашел разумное решение, размещенное здесь fooobar.com/info/22047/...