Orientacja znacznika danych Exif zawsze 0

Muszę znać orientację obrazu z galerii (zrobionego aparatem). Moim początkowym podejściem było użycie MediaStore.Obrazy.Media.Orientacja, która działała dla mojego Droida 1. Podczas testowania na HTC Thunderbolt telefon zapisuje tylko 0 do tego pola.

Następnie przejąłem do odczytu danych exif:

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

To również zwraca 0 dla każdego obrazu. Czy ktoś ma pomysł jak prawidłowo uzyskać orientację zdjęcia na Androidzie?

Author: sgarman, 2011-04-07

3 answers

Oto kod, którego użyłem onActivityResult() w mojej aktywności. Zwrócona intencja polegała na wybraniu obrazu typu image/*. Dla mnie działa dobrze!

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);
 28
Author: dbaugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 18:13:53

Moje rozwiązanie:

Usuń wszelkie sprawdzanie orientacji z danych exif. Nie mogłem znaleźć żadnego przypadku, w którym to było dokładne.

Użyj standardu String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};, Aby uzyskać orientację.

Jeśli to jest 0 Użyj decodeStream...

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

Else it is landscape

 5
Author: sgarman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-13 23:55:06

To jest błąd, który znalazłem, który był związany z innym błędem Androida.. Znalazłem tu rozsądne rozwiązanie https://stackoverflow.com/a/8864367/137404

 3
Author: Tolga E,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:30