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