Apple的AVCamera照片捕捉

时间:2016-10-17 20:26:13

标签: ios swift avcapturesession

我正在尝试使用它: https://developer.apple.com/library/content/samplecode/AVCam/Introduction/Intro.html

拍照后我正试图访问photoData,以便将其上传到服务器。

当按下捕获按钮时,会运行大量的设置代码,然后在最底部调用它:

self.photoOutput.capturePhoto(with: photoSettings, delegate: photoCaptureDelegate)

photoCaptureDelegate是项目附带的另一个文件,其内部是:

func capture(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) {
        if let photoSampleBuffer = photoSampleBuffer {
            photoData = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: photoSampleBuffer, previewPhotoSampleBuffer: previewPhotoSampleBuffer)
            print("Got photo Data...this is where I want to capture/use the data")

        }
        else {
            print("Error capturing photo: \(error)")
            return
        }
    }

所以在这张photoCaptureDelegate中,“photoData”被设置为正在拍摄的任何照片的jpeg。我希望能够在视图控制器中使用该数据,使用capturePhoto按钮,这样我就可以使用我在主视图控制器中定义的函数将其上传到服务器。

如何获取该照片数据并将其用于另一个调用self.photoOutput.capturePhoto的viewcontroller?

或者..从didFinishProcessingPhoto中直接运行发布到服务器代码是不好的做法?我可以做到这一点,所以我可以从里面访问我需要的变量,但这似乎不正确。

1 个答案:

答案 0 :(得分:1)

代理中没有必要这样做。

在调用中,在CameraViewController中,当您创建PhotoCaptureDelegate(第533行)时,它有3个回调,是最后一个完成的回调,在该代码中,您收到了负责照片的photoCaptureDelegate,并在其中包含您的代码,所以你可以做你想做的事

completed: { [unowned self] photoCaptureDelegate in
    //Save capture here. Image data is in here
    //photoCaptureDelegate.photoData
    self.sessionQueue.async { [unowned self] in                  
        self.inProgressPhotoCaptureDelegates[photoCaptureDelegate.requestedPhotoSettings.uniqueID] = nil
    }
}