How to use AVCapturePhotoOutput

前端 未结 6 1808
予麋鹿
予麋鹿 2020-11-27 02:39

I have been working on using a custom camera, and I recently upgraded to Xcode 8 beta along with Swift 3. I originally had this:

var stillImageOutput: AVCapt         


        
6条回答
  •  余生分开走
    2020-11-27 03:41

    Updated to Swift 4 Hi it's really easy to use AVCapturePhotoOutput.

    You need the AVCapturePhotoCaptureDelegate which returns the CMSampleBuffer.

    You can get as well a preview image if you tell the AVCapturePhotoSettings the previewFormat

        class CameraCaptureOutput: NSObject, AVCapturePhotoCaptureDelegate {
    
            let cameraOutput = AVCapturePhotoOutput()
    
            func capturePhoto() {
    
              let settings = AVCapturePhotoSettings()
              let previewPixelType = settings.availablePreviewPhotoPixelFormatTypes.first!
              let previewFormat = [kCVPixelBufferPixelFormatTypeKey as String: previewPixelType,
                                   kCVPixelBufferWidthKey as String: 160,
                                   kCVPixelBufferHeightKey as String: 160]
              settings.previewPhotoFormat = previewFormat
              self.cameraOutput.capturePhoto(with: settings, delegate: self)
    
            }
    
    func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photoSampleBuffer: CMSampleBuffer?, previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) {                        
                if let error = error {
                    print(error.localizedDescription)
                }
    
                if let sampleBuffer = photoSampleBuffer, let previewBuffer = previewPhotoSampleBuffer, let dataImage = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: sampleBuffer, previewPhotoSampleBuffer: previewBuffer) {
                  print("image: \(UIImage(data: dataImage)?.size)") // Your Image
                }   
            }
        }
    

    For more information visit https://developer.apple.com/reference/AVFoundation/AVCapturePhotoOutput

    Note: You have to add the AVCapturePhotoOutput to the AVCaptureSession before taking the picture. So something like: session.addOutput(output), and then: output.capturePhoto(with:settings, delegate:self) Thanks @BigHeadCreations

提交回复
热议问题