如何从ALAssetRepresentation获取正确旋转的UIImage?

4
我正在尝试使用fullScreenImage方法从ALAssetRepresentation获取正确旋转的UIImage。我有几张测试照片,以不同的设备方向拍摄; 这些照片在照片应用程序中显示正确。 fullScreenImage的文档说明如下:

在iOS 5及更高版本中,此方法返回完全裁剪,旋转和调整过的图像-与用户在照片或图像选择器中看到的完全相同。

要从CGImage创建正确旋转的UIImage对象,您可以使用imageWithCGImage:scale:orientation:initWithCGImage:scale:orientation:,传递orientationscale的值。

鉴于文档,我的代码如下:
ALAssetRepresentation *rep = [asset defaultRepresentation];
UIImage *img = [UIImage
    imageWithCGImage:[rep fullScreenImage]
    scale:[rep scale]
    orientation:[rep orientation]];

然而生成的UIImage的旋转是错误的。当我将[rep orientation]替换为UIImageOrientationUp时,对于所有的测试照片,图像都是正确的。显然,我不确定是否应该坚持这个“解决方案”,因为它感觉像一个hack。我做错了什么?

1个回答

11
ALAssetRepresentation *rep = [asset defaultRepresentation];
UIImage *img = [UIImage
    imageWithCGImage:[rep fullScreenImage]
    scale:[rep scale]
    orientation:UIImageOrientationUp];

在iOS 5及以上版本中,全屏图像已经被旋转(因此始终是“向上”的)。 在iOS 4中,行为是不同的。 请参见“在ALAsset中处理照片方向问题”以获得更深入的解释。


你好,Hendrik,再次感谢你的回答!我将提交一个针对文档的错误请求,因为第二段只适用于iOS4,并没有明确说明。PS:您可能希望在您的帖子中省略签名,请参阅此元线程 - zoul
提交为[rdar:// 11604456](http://openradar.appspot.com/11604456),并在一个月后通过省略第二段稍微令人困惑的内容,在即将发布的iOS 6版本中解决。 - zoul
谢谢!我为此(以及其他相关问题)苦苦挣扎了近一个星期。这是第一个有意义且适用于iOS5/iOS6的答案。你是我的英雄 ;) - juhan_h
非常感谢。此解决方案也适用于iOS7.0.6。 - x4h1d
你太棒了!我一直在使用 [UIImage imageWithCGImage:[rep fullResolutionImage]],而你的解决方案解决了旋转问题,谢谢!(适用于iOS 8.1) - Fouad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接