我正在调用
这里图片方向非常重要,因为生成的图像将被输入到Vision Framework工作流中。
AVFoundation
的代理方法来处理照片捕获,但我在将其生成的AVCapturePhoto
转换为具有正确方向的UIImage
方面遇到了困难。尽管下面的例程成功执行,但我始终会得到一个右向的UIImage
(UIImage.imageOrientation
= 3)。我无法在使用UIImage(data: image)
时提供方向,尝试首先使用photo.cgImageRepresentation()?.takeRetainedValue()
也没有帮助。请协助解决。这里图片方向非常重要,因为生成的图像将被输入到Vision Framework工作流中。
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
// capture image finished
print("Image captured.")
if let imageData = photo.fileDataRepresentation() {
if let uiImage = UIImage(data: imageData){
// do stuff to UIImage
}
}
}
更新 1: 阅读苹果的照片捕获编程指南(iOS11已过时),我确实发现了一个错误:
- 在每次拍摄调用(
self.capturePhotoOutput.capturePhoto
)时,必须设置与PhotoOutput
对象的连接,并将其方向更新为与拍摄瞬间设备方向相匹配。为此,我创建了一个UIDeviceOrientation
扩展,并在我创建的snapPhoto()
函数中使用它来调用捕获例程,并等待执行didFinishProcessingPhoto
委托方法。我添加了代码快照,因为这里的代码示例分隔符似乎没有正确显示它们。
更新 2: GitHub上完整项目的链接:https://github.com/agu3rra/Out-Loud
UIImage
初始化程序,它似乎也会忽略方向。这可能是一个需要报告给苹果的错误。 - ricksterextension UIDeviceOrientation { var videoOrientation: AVCaptureVideoOrientation? { switch self { case .portrait: return .portrait case .portraitUpsideDown: return .portraitUpsideDown case .landscapeLeft: return .landscapeRight case .landscapeRight: return .landscapeLeft default: return nil } } }
- Leo Dabus