如何在流或URI中使用ExifInterface



我正在编写一个应用程序,可以从Android的"Share via"菜单发送照片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类")是感激的!

我在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;
}

您可以通过在构建中导入支持ExifInterface来使用文件名字符串或InputStream获得ExifInterface。gradle文件:

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中获得真正的路径。

相关内容

  • 没有找到相关文章

最新更新