iOS UIImage:设置图像方向而不旋转图像本身

iOS UIImage: set image orientation without rotating the image itself

我正在使用AVCapture+相机人像模式来捕捉图像。当我显示捕获的图像时,它很好——看起来很好。但是当我转换为 jpeg 表示然后转换为 base64 字符串到服务器和服务器存储它时,它已经是 "rotated"。

所以我在发送到服务器之前检查了图像方向:它是 UIImageOrientation.Right(所以有什么方法可以使用纵向模式捕获图像但是捕获的图像方向是向上的?好吧,我怀疑之后一些挖掘)。服务器得到图像后,它没有做任何事情,只是忽略了我猜的关于方向的元数据。

因为我拍摄的图像看起来不错,所以我只想保留图像的样子。但是,我想将图像方向设置为向上。如果我只是设置图片方向,图片看起来就不对了。

那么有没有办法设置方向而不导致图像旋转,或者在设置方向向上后,如何保持方向但旋转实际图像以使其看起来正确?

- (UIImage *)removeRotationForImage:(UIImage*)image {
   if (image.imageOrientation == UIImageOrientationUp) return image;

   UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
   [image drawInRect:(CGRect){0, 0, image.size}];
   UIImage *normalizedImage =  UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return normalizedImage;
}

swift 版本的 oldrinmendez 答案

func removeRotationForImage(image: UIImage) -> UIImage {
    if image.imageOrientation == UIImageOrientation.Up {
        return image
    }

    UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
    image.drawInRect(CGRect(origin: CGPoint(x: 0, y: 0), size: image.size))
    let normalizedImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return normalizedImage
}