iOS:自定义相机如何始终以正确的方向保存图像?

Posted

技术标签:

【中文标题】iOS:自定义相机如何始终以正确的方向保存图像?【英文标题】:iOS: How can a custom camera save images always in the right orientation? 【发布时间】:2017-04-27 05:13:20 【问题描述】:

我目前正在使用 ios 实现自定义摄像头。我希望相机始终以正确的方向将图像保存到相册,就像官方 iOS 相机一样:无论您以什么方向握住相机,您始终可以看到照片保存正确的方向。 我检查了许多源代码,他们似乎使用以下内容相当随意地保存了图像:

var image  = UIImage(cgImage: cgImageRef, scale: 1.0, orientation: UIImageOrientation.right)

但这仅在设备直立时有效 有人可以提供任何建议吗?

我也尝试过定位

let uiorientation = UIApplication.shared.statusBarOrientation

但是当屏幕纵向锁定时它总是返回纵向。

【问题讨论】:

【参考方案1】:

当您获得UIImage 对象时,您必须更新图像旋转。 将从图像选择器获取的图像传递给此方法

斯威夫特

func getNormalizedImage(rawImage: UIImage) -> UIImage 

    if (rawImage.imageOrientation == .up) 
        return rawImage
    

    UIGraphicsBeginImageContextWithOptions(rawImage.size, false, rawImage.scale)
    rawImage.draw(in: CGRect(x:0, y:0, width:rawImage.size.width, height:rawImage.size.height))

    let normalizedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return normalizedImage!

目标-C

+(UIImage *)getNormalizedImage:(UIImage *)rawImage 

    if(rawImage.imageOrientation == UIImageOrientationUp)
    return rawImage;

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

    return normalizedImage;

【讨论】:

谢谢,但这不是我想要的。我从 AVCapture 委托中的捕获方法获取 CGImage。其中没有有效的方向信息(方向总是向上)。我需要通过检测设备/接口的方向来分配方向 您可以将 cgimage 转换为 UIimage 并设置默认方向 = .up

以上是关于iOS:自定义相机如何始终以正确的方向保存图像?的主要内容,如果未能解决你的问题,请参考以下文章

在ios5的自定义相册中保存多个图像但不在相机胶卷中?

即使 autoRotation 关闭,也能获取 android 设备方向

将相机捕获的图像保存到ios中的文档目录中[重复]

如何将图像保存到自定义相册?

自定义相册中的图像保存问题以及 iphone 中的默认相机胶卷

如何在 Android 中使用自定义文件名保存相机拍摄的图像?