Android EXIF数据来自相机或图库的图片丢失

时间:2017-02-09 09:57:38

标签: android image-processing camera exif photo-gallery

我需要阅读Exif的一些Image属性(使用Camera或从Gallery中选择)。

以下是我发布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后,{{1}信息迷失了。

Exif中挑选的Images相同。这就是我在Gallery方法中获得Image的方式:

onActivityResult

最后,这里是我阅读Uri uri = data.getData(); Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 数据的方式:

Exif

我尝试了下一个:

  1. 使用我的设备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); (不使用我的picture)来Camera
  2. 使用App
  3. 阅读Exif数据
  4. 它就像一个魅力。
  5. 所以我猜问题是,保存ExifInterface时(使用Image拍摄后)或Camera中的Image被选中Gallery {1}}数据丢失。

    我在Exif发布了至少20-30条帖子,但基本上每个人都遇到的问题是Stackoverflow orientation信息丢失了,所以解决方法是写在exif数据中右orientation

    这个解决方案不适合我,因为我不想覆盖Exif数据,我只想阅读原始数据。

    任何想法/提示? 感谢。

1 个答案:

答案 0 :(得分: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可用于重新分割图像信息。