以纵向拍摄的照片正在以横向保存

Posted

技术标签:

【中文标题】以纵向拍摄的照片正在以横向保存【英文标题】:Photos taken in portrait are being saved in landscape 【发布时间】:2014-08-12 17:23:18 【问题描述】:

我一直在尝试使用 android ACTION_IMAGE_CAPTURE Intent 和 ACTION_GET_CONTENT Intent 来拍照或挑选一张照片。我遇到的问题是,当我尝试在纵向模式下使用 Android 照片意图拍摄照片时,它会将其保存为横向。

我正在尝试从 URI 字符串中保存方向正确的照片的 Bitmap

我发现了这个问题:Android Camera Intent Saving Image Landscape When Taken Portrait,这与我遇到的问题完全相同,但答案不完整,对我不起作用。比如resizedBitmapopts是什么,fileUri.getPath()

【问题讨论】:

标题好像反了?当以纵向拍摄时,它会节省横向 - 就像在链接的问题中一样,不是吗? 是的,你完全正确 - 愚蠢的错误。 绝对合法,甚至更愿意以评论的形式提出这样的问题,以回答不完整或似乎不清楚或不适合您的答案。 Android Camera Intent Saving Image Landscape When Taken Portrait的可能重复 @lschessinger: 你看,合法又高效! 【参考方案1】:

有些相机会将横向模式锁定为相机的默认模式(三星注 2),因此如果您以纵向模式拍照,图像仍会以横向模式保存。大多数相机都会将元数据添加到图像中,如相机供应商、型号等。在可以呈现的各种元数据中,我们感兴趣的是旋转数据。它指定图像要旋转的角度。要了解旋转,您可以使用 ExifInterface 类。

resizedBitmap 图像在 android 中存储为位图对象。由于图像可能很大,将它们全部加载到内存中可能会导致内存不足错误并使您的应用程序消耗更多内存。所以位图首先被调整到合适的大小,然后加载到内存中。

opts 您必须通过 opts 引用 BitmapFactory.Options 方法。它是一个类,提供了改变位图行为的方法,例如使其可变(设置为 true,您可以将灰度等效果应用于此位图),在不将其加载到 RAM 的情况下以像素为单位查找其高度和宽度等。

file它是一个用于对存储在系统中的任何文件执行CRUD操作的类。

Uri.getPath()这个方法返回你的图片存储的路径或者为null。

【讨论】:

感谢您的回答。我的意思是关于那个问题。如果我有照片 Uri,我将如何定义这些变量? 您给出的链接中的答案并不完整。您只需要为他使用的变量提供适当的值。我认为将文件变量更改为 Uri.getPath() 就足够了 对不起,如果我遗漏了什么,resizedBitmapopts 是在哪里定义的?

以上是关于以纵向拍摄的照片正在以横向保存的主要内容,如果未能解决你的问题,请参考以下文章

MFMailComposeViewController图像方向

方向错误的照片

确保照片以与拍摄时相同的方向保存?

拍摄照片时正确设置正确的照片方向

如何更改纵向模式

三星galaxy s2总是将相机视图视为风景?