我正在编写一个应用程序,可以从Android的“分享通过”菜单中发送照片URI。
您获得的URI类型为content://media/external/images/media/556
,但ExifInterface
需要标准文件名。那么如何读取该文件的exif数据(我只想要方向)?这是我的(非工作)代码:
Uri uri = (Uri)extras.getParcelable(Intent.EXTRA_STREAM);
ContentResolver cr = getContentResolver();
InputStream is = cr.openInputStream(uri);
Bitmap bm = BitmapFactory.decodeStream(is);
// This line doesn't work:
ExifInterface exif = new ExifInterface(uri.toString());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
任何帮助(除了“你必须编写自己的ExifInterface类”之外)表示赞赏!
答案 0 :(得分:16)
我在Facebook Android SDK示例中随机找到了答案。我没有测试过它,但它看起来应该可行。这是代码:
public static int getOrientation(Context context, Uri photoUri) {
/* it's on the external media. */
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);
int result = -1;
if (null != cursor) {
if (cursor.moveToFirst()) {
result = cursor.getInt(0);
}
cursor.close();
}
return result;
}
答案 1 :(得分:0)
您可以使用文件名字符串或InputStream来获取ExifInterface,方法是在build.gradle文件中导入支持ExifInterface:
compile 'com.android.support:exifinterface:26.1.0'
然后:
private getExifInterfaceFromUri(Uri uri) throws IOException{
FileInputStream fi = new FileInputStream(uri.getPath());
return new ExifInterface(stream);
}
请记住,在Android中有多种Uri类型,您可能需要使用内容解析器和其他方法从Uri获取真实路径。