Мне нужно прочитать некоторые Exif
свойства Image
(снято с Camera
или выбрано из Gallery
).Данные Android EXIF Изображение с камеры или галереи потеряно
Вот как я запустить Camera
:
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
File file = new File(myObject.getLocalUrl());
Uri fileURI = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileURI);
startActivityForResult(intent, CAPTURE_IMAGE_REQUEST_CODE);
Вот как я запускаю Gallery
Picker
:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(Intent.createChooser(intent, getString(R.string.image_picker_select_image)), SELECT_IMAGE_FROM_GALLERY_REQUEST_CODE);
Проблема заключается в том, что, например, в первом случае (Camera
), после того как Image
берется и сохраняется в External
Storage
, информация Exif
теряется.
То же самое для Images
выбрано из Gallery
. Вот как я получаю в onActivityResult
методе Image
:
Uri uri = data.getData();
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
И, наконец, вот как я прочитал данные Exif
:
ExifInterface exifInterface = null;
try {
exifInterface = new ExifInterface(myObject.getLocalUrl());
} catch (IOException e) {
e.printStackTrace();
}
String exifOrientation = exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION);
String exifMake = exifInterface.getAttribute(ExifInterface.TAG_MAKE);
String exifModel = exifInterface.getAttribute(ExifInterface.TAG_MODEL);
Я попробовал следующее:
- Take a
picture
, используя мое устройствоCamera
(без использования моегоApp
). - Прочитать
Exif
данные, используяExifInterface
. - Это работает как шарм.
Так что я думаю, проблема в том, что, когда Image
сохраняется (после того, как это принято с Camera
) или Image
определена из Gallery
, данные Exif
потеряется.
Я прочитал по крайней мере 20-30 поста здесь в Stackoverflow
, но в основном проблема, что у каждого есть что orientation
exif
информации теряется, поэтому решение пишет право orientation
в данных Exif
.
Это решение не подходит для меня, так как я не хочу переписывать данные Exif
, я просто хочу прочитать оригинал.
Любые идеи/подсказки? Спасибо.
'new ExifInterface (myObject.getLocalUrl());'. Что такое myObject? Что это связано с onActivityResult()? Лучше показать полный код. – greenapps
'Вот как я получаю изображение в методе onActivityResult:'. Ненужные. Не важно. Вы должны показать нам, как вы получаете exif из файла .jpg. – greenapps
'проблема, которую каждый имеет, заключается в том, что информация exif-ориентации теряется, поэтому решение пишет правильную ориентацию в данных Exif.'. Для меня это не имеет никакого смысла. Файлы JPG не теряют информацию exif. – greenapps