gpt4 book ai didi

android - 从内容 ://and File://URIs 获取旋转信息

转载 作者:行者123 更新时间:2023-11-29 15:01:03 32 4
gpt4 key购买 nike

我在让用户选择图像然后确定是否有必要旋转它时遇到问题。我想我会很聪明,让我所有的处理都在 Uris 上进行,以便不知道图像的确切来源,但我所看到的确定旋转的方法似乎需要 Exif 信息,而这些信息不适用于内容://Uri 的类型。

问题:如果我的图像句柄是 Uri,我如何确定图像是否需要旋转,而您不确定该图像的来源?

我这样做是为了获取图像:

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, INTENT_IMAGE_LOAD);

... 在 onActivityResult() 中,我收到 Uri 以供稍后处理。

        Uri imageUri = data.getData();

// if the imageUri needs rotation, then fix it here (I know how to fix it).
// ... but I think I need to use Exif data which I can't get from Content:// URI
// hmmmmmmmm


doMyProcessingOnUri(context, imageUri);

显然 Android 7.0 已经改变了像这样使用 Intent 的某些方面,我认为发布的大部分帮助都与 7.0 之前的版本有关。

最佳答案

根据 Introducing the ExifInterface Support Library :

For apps that receive images from other apps with a content:// URI (such as those sent by apps that target API 24 or higher), ExifInterface now works directly off of an InputStream; this allows you to easily extract Exif information directly out of content:// URIs you receive without having to create a temporary file.

他们继续展示了如何提取旋转信息:

InputStream in = getContentResolver().openInputStream(uri);
ExifInterface exifInterface = new ExifInterface(in);
int rotation = 0;
int orientation = exifInterface.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotation = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotation = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotation = 270;
break;
}

您可以使用以下 Gradle 导入来包含 ExifInterface 支持库:

compile "com.android.support:exifinterface:26.0.1"

关于android - 从内容 ://and File://URIs 获取旋转信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45656512/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com