UIImagePickerController 中的 UIImage 方向问题

Posted

技术标签:

【中文标题】UIImagePickerController 中的 UIImage 方向问题【英文标题】:UIImage from UIImagePickerController orientation issue 【发布时间】:2012-10-25 17:39:28 【问题描述】:

我正在使用UIImagePickerController 从用户的照片库中获取图像和/或使用相机拍摄。效果很好。

我注意到获取的图像经常(总是?)返回,并将其 imageOrientation 设置为 UIImageOrientationRight。但是该图像是使用设备纵向拍摄的。 这是为什么呢?这是一部 iPhone4S,ios6,使用后置摄像头 - 所以分辨率是 8MP。

在模拟器中,从照片库中抓取照片,图像返回UIImageOrientationUp

当我以UIImageView 显示图像时,方向看起来正确(纵向/向上)。但是当我去裁剪图像时,坐标系并不是我所期望的。 0,0 在图片的右上角,我想当它报告UIImageOrientationRight时这是有道理的。

我正在寻找对发生的事情的解释以及处理奇数坐标系的正确方法。

编辑:在我看来,至少在 iPhone4S 上,相机总是拍摄 UIImageOrientationRight/“风景”图像,并且 UIImageView 尊重显示的 imageOrientation。但是,如果我使用 UIImagePNGRepresentation 保存图像,则不会保留方向(我想我在某处读到过。)

【问题讨论】:

【参考方案1】:

这与拍摄图像时手机所处的方向有关。手机不会旋转来自摄像头传感器的图像数据来弥补图像,而是设置 imageOrientation,然后 UIImage 将负责以正确的方式渲染。

当您尝试裁剪时,通常会将图像更改为 CGImage,这样会丢失方向信息,所以突然间您会得到方向奇怪的图像。

您可以获得 UIImage 上的几个类别,这些类别将在考虑 imageOrientation 的同时执行图像裁剪。

看看link或link

【讨论】:

是的,但是拍摄图像时手机是纵向的。那么图像不应该是 UIImageOrientationUp 吗?为什么是 UIImageOrientationRight? 我开始明白相机总是产生比它们高的图像(iPhone4S 相机)。如果设备处于纵向模式,则将图像标记为 UIImageOrientationRight 以使图像以纵向显示。如果设备处于横向,则图像被标记为 UIImageOrientationUp。 根据this,相机的原生方向是横向而不是纵向。

以上是关于UIImagePickerController 中的 UIImage 方向问题的主要内容,如果未能解决你的问题,请参考以下文章

仅在横向 UIImagePickerController 中显示CameraControls

UIImagePickerController 呈现在视图中

iPhone 中 UIImagePickerController 的内存泄漏问题

裁剪中的 UIImagePickerController 状态栏问题

UIImagePickerController从拍照图库相册获取图片

iOS7 中的 UIImagePickerController