将 UIImage 转换为 CGImage 会导致图像旋转

Posted

技术标签:

【中文标题】将 UIImage 转换为 CGImage 会导致图像旋转【英文标题】:Converting UIImage to CGImage cause rotation of Image 【发布时间】:2012-05-25 06:03:43 【问题描述】:

我正在尝试通过我的自定义裁剪器裁剪图像。不是来自 UIImagePickerController 的。现在,我通过处理 UIImagePicker 的委托在 UIImgeView 中显示从 Image Picker 捕获的图像:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
    imvOriginalImage.image = image;

为了裁剪,我必须将此图像转换为 CGImageRef。图像以纵向模式拍摄。现在,当我在 CGImageRef 中转换此图像时,图像方向会发生变化。即使我使用以下内容:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
    //imvOriginalImage.image = image;
    CGImageRef imgRef = [image CGImage];
    UIImage *img = [UIImage imageWithCGImage:imgRef];
    [imvOriginalImage setImage:img];

图像方向已更改。这只发生在那些以纵向模式拍摄的图像上。横向图片没有这个问题。

    为什么会这样? 如何解决?

提前致谢。

【问题讨论】:

这是因为UIImage 有一个imageOrientation 属性,它知道旋转图像,但CGImageRef 不知道这个。 【参考方案1】:

这是 iPhone 相机与 Home 按钮相比旋转图像。它使用EXIF,即图像的元数据。看到这个帖子:

iPhone image rotation

【讨论】:

以上是关于将 UIImage 转换为 CGImage 会导致图像旋转的主要内容,如果未能解决你的问题,请参考以下文章

将UIImage转换为CVPixelBufferRef

UIImage 在将其转换为 CIImage,然后转换为 CGImage 并返回 UIImage 时失去其方向

有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?

为啥我的 CGImage 是 UIImage 大小的 3 倍

CGContextDrawImage 在传递 UIImage.CGImage 时将图像倒置

iOS、SpriteKit 将 SKTextureAtlas/SKTexture 转换为 UIImage