Exif 数据 TAG_ORIENTATION 始终为 0

Posted

技术标签:

【中文标题】Exif 数据 TAG_ORIENTATION 始终为 0【英文标题】:Exif data TAG_ORIENTATION always 0 【发布时间】:2011-07-31 06:44:29 【问题描述】:

我需要知道图库中的图像(由相机拍摄)的方向。我最初的方法是使用适用于我的 Droid 1 的 MediaStore.Images.Media.ORIENTATION。在 HTC Thunderbolt 上进行测试时,该手机仅将 0 保存到该字段。

然后我开始阅读 exif 数据:

 ExifInterface exifReader = new ExifInterface(mFilePath);
 exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);

这也为每个图像返回 0。任何人都知道如何在 android 上正确获取照片的方向?

【问题讨论】:

我找到了另一个非常有效的解决方案! ***.com/a/19610087/2854335 【参考方案1】:

这是我在活动中使用的 onActivityResult() 代码。返回的意图是选择 image/* 类型的图像。对我来说效果很好!

Uri imageUri = intent.getData();
String[] orientationColumn = MediaStore.Images.Media.ORIENTATION;
Cursor cur = managedQuery(imageUri, orientationColumn, null, null, null);
int orientation = -1;
if (cur != null && cur.moveToFirst()) 
    orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
  
Matrix matrix = new Matrix();
matrix.postRotate(orientation);

【讨论】:

这种方法对我来说很有效,可以在图库中获取图像的方向。谢谢..!! :) 谢谢!请注意, managedQuery 现在已弃用。您可以将其替换为“getApplicationContext().getContentResolver().query(...)”。 这是一个很好的解决方案,当 ExifInterface 不起作用时它对我有用。 在 Nougat 上,从图库中选择一个 180 方向的测试图像,返回 0。【参考方案2】:

我的解决方案:

从 exif 数据中删除任何方向检查。我找不到一个准确的实例。

使用标准的String[] orientationColumn = MediaStore.Images.Media.ORIENTATION; 获取方向。

如果这是0,请使用 解码流...

if(o.outHeight > o.outWidth)
  //set orientation to portrait

否则是风景

【讨论】:

这对我不起作用,因为如果图像实际上处于不同的方向,则高度、宽度会以某种方式正确切换.. 只是为了更新我自己的问题,这就是我克服这个问题的方法; ***.com/a/8864367/137404 如果图片是正方形的,所以宽度和高度相同但图片是倒置的,我想翻转它怎么办? 你能发布完整的解决方案吗?【参考方案3】:

这是我发现的一个与另一个 android 错误有关的错误。我找到了一个合理的解决方案,贴在这里 https://***.com/a/8864367/137404

【讨论】:

该链接发布了另一个链接,该链接发布了另一个链接。在 SO 中,Linkception 是一种犯罪行为。

以上是关于Exif 数据 TAG_ORIENTATION 始终为 0的主要内容,如果未能解决你的问题,请参考以下文章

在某些 Gingerbread 设备上,使用 ACTION_IMAGE_CAPTURE 拍摄的图像对于 ExifInterface.TAG_ORIENTATION 始终返回 1

PHP EXIF 数据不显示

Exif.js读取图像的元数据

在调整图像大小时保留 exif 数据

Libexif ,附加新的 exif 数据

mac OS开发中获取exif数据