Apple 的 AVCamera 照片捕捉

Apple's AVCamera photo capture

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

我正在尝试在拍摄照片后访问照片数据,以便将其上传到服务器。

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

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 内部 运行 发布到服务器代码是否是一种不好的做法?我可以做到,所以我可以从那里访问我需要的变量,但这似乎不正确。

委托中不需要这样做。

在 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
    }
}