AVCaptureStillImageOutput 是AVCaptureOutput具体子类,用来拍摄静态照片,该类在 iOS 10.0 中已弃用,不支持较新的相机拍照功能,如RAW图像输出和动态照片。在 iOS 10.0 及更高版本中,改用AVCapturePhotoOutput类。
1、拍照
调用下述方法拍照:
- (void)captureStillImageAsynchronouslyFromConnection:(AVCaptureConnection *)connection
completionHandler:(void (^)(CMSampleBufferRef imageDataSampleBuffer, NSError *error))handler;
拍照后要调用的 handler 中的参数:
- 参数
imageDataSampleBuffer:捕获的数据:包含适合于图像数据格式的元数据。例如,包含JPEG数据的缓冲区可以携带kCGImagePropertyExifDictionary作为附件。 - 参数
error: 如果请求失败,返回NSError对象。
可以使用下述属性查看是否正在拍照:
@property(readonly, getter=isCapturingStillImage) BOOL capturingStillImage;
2、配置图像设置
| 属性 | 类型 | 描述 |
|---|---|---|
availableImageDataCVPixelFormatTypes |
NSArray<NSNumber *> |
支持的图像像素格式,可以将其用作outputSettings属性中kCVPixelBufferPixelFormatTypeKey的值。 |
availableImageDataCodecTypes |
NSArray<AVVideoCodecType> |
支持的图像编解码器格式,可以将其用作outputSettings属性中AVVideoCodecKey的值。 |
outputSettings|NSDictionary<NSString *,id>|输出设置。
3、图像格式转换
将静态图像数据CMSampleBufferRef转为NSData
+ (NSData *)jpegStillImageNSDataRepresentation:(CMSampleBufferRef)jpegSampleBuffer;
- 参数
CMSampleBufferRef: 携带JPEG图像数据的样本缓冲区,如果jpegSampleBuffer为NULL或不是JPEG格式,则此方法抛出异常NSInvalidArgumentException。
本文涉及到的更多信息请阅读:
点击阅读 捕获设备AVCaptureDevice
点击阅读 捕获会话AVCaptureSession
点击阅读 捕获输出超类AVCaptureOutput
点击阅读 拍摄静态照片AVCaptureStillImageOutput
点击阅读 拍照AVCapturePhotoOutput
点击阅读 拍照协议方法AVCapturePhotoCaptureDelegate
点击阅读 预拍摄的照片设置AVCapturePhotoSettings
点击阅读 拍摄一组照片AVCapturePhotoBracketSettings
点击阅读 拍摄出的照片解析设置 AVCaptureResolvedPhotoSettings
点击阅读 拍照封装数据AVCapturePhoto