iOS UIImage: 如何设置图片方向而不旋转图片本身

5

我正在使用AVCapture +相机人像模式来捕捉图像。当我显示捕捉的图像时,看起来很好 - 看起来正常。但是,当我转换为jpeg表示并将其转换为base64字符串发送到服务器并存储时,它已经“旋转”了。

所以我在将图像发送到服务器之前检查了图像方向:它是UIImageOrientation.Right(那么有没有办法使用纵向模式拍摄图像,但捕捉的图像方向是向上的呢?嗯,我怀疑在挖掘一番后还是不行)。服务器收到图像后并未执行任何操作,估计只是忽略了有关方向的元数据。

因为我捕捉的图像外观良好,我只想保留图像的外观。但是,我想将图像方向设置为朝上。如果我只设置图像方向,则图像看起来不正确。

那么有没有办法在不使图像旋转的情况下设置方向?或者在将方向设置为向上后,如何保持方向但旋转实际图像使其看起来正确?

2个回答

10
- (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;
}

8

这是 oldrinmendez 答案的 Swift 版本

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
}

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