我一直在使用自定义相机,最近我与Swift 3一起升级到了Xcode 8 beta。
var stillImageOutput: AVCaptureStillImageOutput?
但是,我现在收到警告:
iOS 10.0中不推荐使用“ AVCaptureStillImageOutput”:改用AVCapturePhotoOutput
由于这是相当新的内容,因此我没有看到太多信息。这是我当前的代码:
var captureSession: AVCaptureSession? var stillImageOutput: AVCaptureStillImageOutput? var previewLayer: AVCaptureVideoPreviewLayer? func clickPicture() { if let videoConnection = stillImageOutput?.connection(withMediaType: AVMediaTypeVideo) { videoConnection.videoOrientation = .portrait stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (sampleBuffer, error) -> Void in if sampleBuffer != nil { let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer) let dataProvider = CGDataProvider(data: imageData!) let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent) let image = UIImage(cgImage: cgImageRef!, scale: 1, orientation: .right) } }) } }
我尝试查看AVCapturePhotoCaptureDelegate,但是我不确定如何使用它。有人知道如何使用吗?谢谢。
AVCapturePhotoCaptureDelegate
更新到Swift 4 Hi,它真的很容易使用AVCapturePhotoOutput。
AVCapturePhotoOutput
您需要AVCapturePhotoCaptureDelegate返回的 CMSampleBuffer。
CMSampleBuffer
如果您告诉AVCapturePhotoSettingsPreviewFormat,则还可以获得预览图像。
AVCapturePhotoSettings
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 } } }
有关更多信息,请访问https://developer.apple.com/reference/AVFoundation/AVCapturePhotoOutput
注意:拍摄照片之前,您必须将添加AVCapturePhotoOutput到AVCaptureSession。所以像这样:session.addOutput(output),然后:output.capturePhoto(with:settings, delegate:self)谢谢@BigHeadCreations
AVCaptureSession
session.addOutput(output)
output.capturePhoto(with:settings, delegate:self)