2017-02-09 24 views
3

Мне нужно прочитать некоторые 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); 

Вот как я запускаю GalleryPicker:

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 берется и сохраняется в ExternalStorage, информация 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); 

Я попробовал следующее:

  1. Take a picture, используя мое устройство Camera (без использования моего App).
  2. Прочитать Exif данные, используя ExifInterface.
  3. Это работает как шарм.

Так что я думаю, проблема в том, что, когда Image сохраняется (после того, как это принято с Camera) или Image определена из Gallery, данные Exif потеряется.

Я прочитал по крайней мере 20-30 поста здесь в Stackoverflow, но в основном проблема, что у каждого есть что orientationexif информации теряется, поэтому решение пишет право orientation в данных Exif.

Это решение не подходит для меня, так как я не хочу переписывать данные Exif, я просто хочу прочитать оригинал.

Любые идеи/подсказки? Спасибо.

+0

'new ExifInterface (myObject.getLocalUrl());'. Что такое myObject? Что это связано с onActivityResult()? Лучше показать полный код. – greenapps

+0

'Вот как я получаю изображение в методе onActivityResult:'. Ненужные. Не важно. Вы должны показать нам, как вы получаете exif из файла .jpg. – greenapps

+0

'проблема, которую каждый имеет, заключается в том, что информация exif-ориентации теряется, поэтому решение пишет правильную ориентацию в данных Exif.'. Для меня это не имеет никакого смысла. Файлы JPG не теряют информацию exif. – greenapps

ответ

0

Попробуйте с описанным ниже методом: пройти Uri в этот метод

public static int getOrientation(Context context, Uri photoUri) { 
      Cursor cursor = context.getContentResolver().query(photoUri, 
      new String[] { MediaStore.Images.ImageColumns.ORIENTATION },null, null, null); 
      try { 
       if (cursor.moveToFirst()) { 
        return cursor.getInt(0); 
       } else { 
        return -1; 
       } 
      } finally { 
       cursor.close(); 
      } 
     } 

Есть много ImageColumns доступна информация пересортицы изображения.

+0

Я попытался использовать метод ExifInterface и этот метод, и в обоих случаях я получаю '0' только в качестве ориентации для каждого отдельного изображения на двух проверенных мной телефонах (Moto G4 - Samsung Galaxy J5) –