Android EXIF相机或多媒体资料中的数据图像丢失

Android EXIF相机或多媒体资料中的数据图像丢失,android,image-processing,camera,exif,photo-gallery,Android,Image Processing,Camera,Exif,Photo Gallery,我需要阅读图像的一些Exif属性(使用相机拍摄或从图库中拾取) 下面是我如何启动摄像头的: Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File file = new File(myObject.getLocalUrl()); Uri fileURI = FileProvider.getUriForFile(context, context.getApplicationContext().ge

我需要阅读
图像的一些
Exif
属性(使用
相机拍摄或从
图库中拾取)

下面是我如何启动
摄像头的:

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);
下面是我如何启动
选择器

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
),在
图像
被拍摄并保存在
外部
存储器
中之后,
Exif
信息丢失

对于从
库中拾取的
图像
也是如此。这就是我在
onActivityResult
方法中获得
图像的方式:

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);
我尝试了下一个:

  • 使用我的设备
    相机拍摄
    照片
    (不使用我的
    应用程序
  • 使用
    ExifInterface
    读取
    Exif
    数据
  • 它就像一个符咒
  • 因此,我想问题在于当保存
    图像
    时(使用
    相机拍摄后)或从
    库中拾取
    图像
    时,
    Exif
    数据会丢失

    我在这里读过至少20-30篇文章,内容是
    Stackoverflow
    ,但基本上每个人都面临的问题是
    orientation
    exif
    信息丢失,因此解决方案是在
    exif
    数据中写入正确的
    orientation

    这种解决方案对我来说并不合适,因为我不想覆盖
    Exif
    数据,我只想读取原始数据

    有什么想法/暗示吗?
    谢谢。

    尝试以下方法:将
    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可用于重新格式化图像信息。

    新建ExiFinInterface(myObject.getLocalUrl())。什么是myObject?它与onActivityResult()有什么关系?最好显示完整的代码。
    这就是我在onActivityResult方法中获取图像的方式:
    。无关的没关系。您应该向我们展示如何从.jpg文件中获取exif。
    每个人都面临的问题是方向exif信息丢失,因此解决方案是在exif数据中写入正确的方向。
    。这一切对我来说毫无意义。JPG文件不会丢失exif信息。
    在第一种情况下(相机),在拍摄图像并保存到外部存储器后,exif信息会丢失。
    ?摄像头应用程序会将图像保存到.jpg文件中。带有exif标头。就这些。你不会再存钱了吧?请显示完整的onActivityResult代码。
    2。使用ExiFinInterface读取Exif数据。
    。那你有什么不同之处?从gallery中选择还是如何选择?我尝试过使用
    ExiFinInterface
    方法和此方法,在这两种情况下,我只得到
    0
    作为我测试过的两款手机(Moto G4和三星Galaxy J5)中每一张图片的方向