我有一个处理图像文件的活动:
if (Intent.ACTION_VIEW.equals(action) && type != null && type.startsWith("image/")) {
Uri imageUri = i.getData();
try {
Bitmap image = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
} catch (Exception e) {
e.printStackTrace();
}
}
这让我得到了位图中的图像,但是我还需要从中获取exif数据。使用image.compress
保存图像会删除此数据。
例如,如果我点击gmail中的View
,就没有可以使用的真实路径,所以我一直试图获取exif数据。有没有办法将byte[]
数据传递到我的活动中,或者从Bitmap
对象获取exif数据?
注意:
此:
ExifInterface exifData = new ExifInterface(imageUri.getPath());
不会导致异常,但是我对所有标记都是null,如果我尝试打印路径,我会得到这个:
/my.email@gmail.com/messages/248/attachments/0.1/BEST/false
如果我首先在gmail中点击save
然后点击view
,我可以使用上述方法成功检索exif数据,并将imageUri.getPath()
传递给exif构造函数。
如果无法使view
正常工作,那么如何才能使用户在将文件保存到磁盘后才提示使用我的应用程序?这就是我的意图过滤器现在的样子:
<activity android:name=".GameActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
答案 0 :(得分:0)
应该可以用以下内容提取exif数据:
How to use ExifInterface with a stream or URI
从那里采取: http://android-er.blogspot.co.at/2011/04/read-exif-of-jpg-file.html
//Get Real URL
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = parentActivity.managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String realURL = cursor.getString(column_index);
//Access Exif
ExifInterface exifInterface = new ExifInterface(realURL);
String focal_length = exifInterface.getAttribute(ExifInterface.TAG_FOCAL_LENGTH);