0

我有一个处理图像文件的活动:

 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删除此数据。

例如,如果我单击Viewgmail,则没有可以使用的真实路径,因此我一直在尝试获取 exif 数据。有没有办法获取byte[]传递给我的活动的数据,或从对象获取 exif 数据Bitmap

笔记:

这个:

ExifInterface exifData = new ExifInterface(imageUri.getPath());

不会导致异常,但是我得到所有标签的 null ,如果我尝试打印路径,我会得到:

/my.email@gmail.com/messages/248/attachments/0.1/BEST/false

如果我先点击save然后view在 gmail 中,我可以使用上述方法成功检索 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>
4

1 回答 1

0

应该可以通过以下方式提取exif数据:

如何将 ExifInterface 与流或 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);
于 2012-08-12T21:44:56.283 回答