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

时间:2012-06-04 10:28:00

标签: objective-c ios alassetslibrary alasset

我正在尝试使用UIImage方法从ALAssetRepresentation正确旋转fullScreenImage。我有几张以不同设备方向拍摄的测试照片;照片在照片应用中正确显示。 fullScreenImage的文档说:

  

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

     

要使用UIImage创建正确旋转的CGImage对象,请使用   imageWithCGImage:scale:orientation:或   initWithCGImage:scale:orientation:,传递orientation的值   和scale

鉴于文档,我的代码如下所示:

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

但结果UIImage的轮换是错误的。当我用[rep orientation]替换UIImageOrientationUp时,图片适用于所有测试照片。显然我对于坚持这个“解决方案”犹豫不决,因为它感觉像是一个黑客。我做错了什么?

1 个答案:

答案 0 :(得分:11)

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

在iOS 5下是正确的,全屏图像已经旋转(所以它总是“向上”)。在iOS 4下,行为是不同的。有关更深入的解释,请参阅Orientation does not behave correctly with Photo in ALAsset