AVCapturePhoto 用于通过AVCapturePhotoOutput
收集的图像数据的容器。使用AVCapturePhotoOutput
类拍摄照片时,委托对象将以AVCapturePhoto
对象的形式接收每个生成的图像和相关数据。此对象是一个不可变的包装器,我们可以从中检索拍摄照片的各种结果。
除了照片图像像素缓冲区,AVCapturePhoto
对象还可以包含预览大小的像素缓冲区,捕获元数据,以及在支持的设备上捕获深度数据和相机校准数据。从AVCapturePhoto
对象,可以生成适合写入文件的数据,例如以HEIC文件格式包含的HEVC编码图像数据,包括预览图像,深度数据和其他附件。
AVCapturePhoto
实例包装单个图像结果。 例如,如果请求对3张图像进行拍摄,则回调将被调用3次,每次都会传送一个AVCapturePhoto
对象。
1、解决照片拍摄请求
属性(只读) |
数据类型 |
描述 |
resolvedSettings |
AVCaptureResolvedPhotoSettings |
用于请求此照片拍摄的设置对象,该对象的uniqueID 值可以确定是哪次调用的-capturePhotoWithSettings:delegate: 方法。 |
photoCount |
NSInteger |
从 1 开始这张照片在同一拍摄请求序列中的索引,该次拍摄结果resolvedSettings 的expectedPhotoCount 属性指示将为给定拍摄请求返回的图像总数。当协议方法-captureOutput:didFinishProcessingPhoto:error: 收到的photoCount 值与expectedPhotoCount 值匹配的照片时,我们确定收到了给定拍摄请求的最后一个。 |
timestamp |
CMTime |
拍摄图像的时间;此时间戳始终与AVCapturePhotoOutput 所连接的AVCaptureSession 对象的主时钟时间同步。 |
2、访问照片像素数据
属性(只读) |
数据类型 |
描述 |
rawPhoto |
BOOL |
此照片对象是否包含RAW格式数据;当以RAW格式请求拍摄时,AVCapturePhotoOutput 会多次调用协议方法-captureOutput:didFinishProcessingPhoto:error: ,同时提供RAW照片数据和等效处理的照片。使用此属性可以区分同一捕获的RAW和处理结果。 |
pixelBuffer |
CVPixelBufferRef |
照片的未压缩或RAW图像样本缓冲区;如果请求RAW格式的照片拍摄,或者没有压缩的处理格式(如TIFF),则可以使用此属性访问基础样本缓冲区;如果请求以JPEG或HEVC / HEIF等压缩格式捕获,则此属性的值为nil。使用fileDataRepresentation 或CGImageRepresentation 方法获取压缩的图像数据。 |
3、访问预览图数据
属性(只读) |
数据类型 |
描述 |
embeddedThumbnailPhotoFormat |
NSDictionary<NSString *,id> |
描述预览图数据格式的字典 (参阅有关可能的视频设置词典键和值);如果在请求拍摄时通过指定AVCapturePhotoSettings 的embeddedThumbnailPhotoFormat 属性请求嵌入式缩略图,则此属性的值是嵌入缩略图的已解析视频设置字典。如果未请求嵌入的缩略图,则此属性的值为nil。 |
previewPixelBuffer |
CVPixelBufferRef |
预览图的像素数据;如果在请求拍摄时通过指定AVCapturePhotoSettings 的previewPhotoFormat 属性请求预览图,则此属性可以访问生成的预览图像数据。 像素缓冲区仅包含正确显示所需的最小附件。如果未请求预览图像,则此属性的值为nil。 |
4、访问照片元数据
属性(只读) |
数据类型 |
描述 |
metadata |
NSDictionary<NSString *,id> |
描述拍摄图像元数据的字典 (参阅CGImageProperties键和值);使用照片捕获的元数据可以包括图像方向,EXIF相机属性和动态照片元数据。 |
portraitEffectsMatte |
AVPortraitEffectsMatte |
使用照片拍摄的人像效果遮罩。 |
cameraCalibrationData |
AVCameraCalibrationData |
拍摄照片的相机设备的校准信息;仅当在请求拍摄时指定了cameraCalibrationDataDeliveryEnabled 和dualCameraDualPhotoDeliveryEnabled 设置时,才会显示摄像机校准数据。 |
depthData |
AVDepthData |
照片拍摄的深度或视差图数据。在支持的设备上要请求捕获深度数据,在请求照片拍摄时将AVCapturePhotoSettings 对象的depthDataDeliveryEnabled 属性设置为YES。如果未请求深度数据传递,则此属性的值为nil。注意:如果在请求照片拍摄时将AVCapturePhotoOutput 的embedsDepthDataInPhoto 属性设置为NO,则此属性仍提供深度数据,但在生成用于输出的照片文件数据时不包括该数据。 |
sourceDeviceType |
AVCaptureDeviceType |
拍摄照片的设备类型;如果AVCapturePhoto 对象不是来自AVCaptureDevice 捕获,则此属性的值可以为nil。使用AVCaptureDeviceTypeBuiltInDualCamera 设备和dualCameraDualPhotoDeliveryEnabled 设置拍摄双张照片时,使用此属性确定两个生成的照片对象中的哪一个来自AVCaptureDeviceTypeBuiltInWideAngleCamera 或AVCaptureDeviceTypeBuiltInTelephotoCamera 设备。对于所有其他捕获,此属性的值等于AVCapturePhotoOutput 所连接的AVCaptureDevice 的deviceType 属性. |
5、包装文件输出数据
- (NSData *)fileDataRepresentationWithCustomizer:(id<AVCapturePhotoFileDataRepresentationCustomizer>)customizer;
//生成并返回照片及其附件的数据;如果照片和附件数据无法转换则为nil。调用此方法可将图像像素缓冲区以及捕获期间创建的元数据和其他附件(如预览照片和深度图)格式化并打包为适合写入该类型文件的数据。
- (NSData *)fileDataRepresentation;
//提取并将拍摄的照片的主图像作为CoreGraphics图像对象返回;如果无法转换图像,则为nil。
- (CGImageRef)CGImageRepresentation;
//提取并将拍摄的照片的预览图像作为CoreGraphics图像对象返回;如果无法转换图像或未在AVCapturePhotoSettings请求预览图像,则为nil。
- (CGImageRef)previewCGImageRepresentation;
6、检查拍摄信息
属性(只读) |
数据类型 |
描述 |
bracketSettings |
AVCaptureBracketedStillImageSettings |
此照片的方括号内捕捉设置变化;当使用AVCapturePhotoBracketSettings 类请求包围拍摄时,指定该对象的数组,指示要应用于括号中每个图像的捕获设置变化(如曝光补偿)。此属性指示与此特定照片关联的设置,如果此照片不是括号内捕获的一部分,则为nil。 |
sequenceCount |
NSInteger |
从 1 开始,这张照片在括号内的拍摄序列中的索引。如果此照片是括号内捕获的一部分,则此属性指示序列中当前结果的计数;如果此照片不是括号内捕获的一部分,则此属性的值为0。 |
lensStabilizationStatus |
AVCaptureLensStabilizationStatus |
有关在包围照片拍摄期间使用镜头稳定性的信息。 |
如果设备配置不支持OIS,则lensStabilizationStatus
属性的值为AVCaptureLensStabilizationStatusUnsupported
。如果支持OIS,但此捕获的照片不是来自请求OIS的括号内捕获,则此属性的值为AVCaptureLensStabilizationStatusOff
。否则,此属性指示设备如何在括号内捕获期间应用OIS。
AVCaptureLensStabilizationStatus 在括号内的照片捕捉期间指示光学图像稳定硬件状态的常数。
值 |
描述 |
AVCaptureLensStabilizationStatusUnsupported |
拍摄此照片的设备或设备配置无法使用镜头稳定功能。 |
AVCaptureLensStabilizationStatusOff |
镜头稳定性未指定用于此照片拍摄。 |
AVCaptureLensStabilizationStatusActive |
镜头稳定在整个拍摄期间都有效。 |
AVCaptureLensStabilizationStatusOutOfRange |
照片捕捉启用了镜头稳定功能,但设备运动或捕捉持续时间超出了稳定模块的校正限制。 |
AVCaptureLensStabilizationStatusUnavailable |
在拍摄照片期间,镜头稳定暂时无法使用。 |
本文涉及到的更多信息请阅读:
点击阅读 AVCaptureDevice
点击阅读 AVCaptureSession
点击阅读 AVCapturePhotoOutput
点击阅读 AVCapturePhotoSettings
点击阅读 AVCaptureResolvedPhotoSettings
点击阅读 AVCapturePhoto
网友评论