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)中每一张图片的方向