MediaStream Image Capture API 用于管理和配置从照相设备中拍照或录像,同时支持获取一些设备参数,如图像大小、红眼模式以及闪光灯模式等
初始化 调用 ImageCapture()
构造方法创建一个图像捕获器
需要传入一个 MediaStreamTrack
参数,作为目标进行捕获的视频轨道
若传入的参数表示一个视频轨道,即其 kind
属性为 video
,抛出 NotSupportedError
异常
可以调用 MediaDevices
接口的 getUserMedia()
方法从媒体设备获取到媒体流,随后调用 MediaStream
接口的 getVideoTracks()
方法获取到对应媒体流的视频轨道,并将此作为参数传入 ImageCapture()
构造方法
创建后,传入的 MediaStreamTrack
参数可以通过实例的 track
只读属性获取到其引用
拍照 调用 ImageCapture
接口的 takePhoto()
方法进行拍照
方法传入一个可选的表示照相配置项的对象参数,其属性如下:
redEyeReduction
参数接收一个布尔值,表示相机是否启用了红眼模式
imageHeight
参数接收一个数字,表示相机设备提供的照片高度
imageWidth
参数接收一个数字,表示相机设备提供的照片宽度
fillLightMode
参数接收一个字符串,值为 auto
off
flash
之一,表示相机启用的闪光模式
方法返回一个兑现一个 Blob
实例的 Promise
调用 ImageCapture
接口的 grabFrame()
方法进行截取快照
方法返回一个兑现一个 ImageBitmap
实例的 Promise
两方法在当前传输视频轨道的 readyState
不为 live
,抛出 InvalidStateError
异常
两方法在因为其他未知原因无法完成操作,抛出 UnknownError
异常
参数及配置 调用 ImageCapture
接口的 getPhotoCapabilities()
方法获取允许配置的范围及设定,返回一个对象
redEyeReduction
属性返回一个字符串,值为 never
always
controllable
之一,表示相机目前的红眼模式设定
imageHeight
属性返回一个对象,包含 min
max
step
等属性,表示相机设备支持的照片高度范围
imageWidth
属性返回一个对象,包含 min
max
step
等属性,表示相机设备支持的照片宽度范围
fillLightMode
属性返回一个字符串数组,数组各项为 auto
off
flash
之一且不会重复,表示相机支持的闪光模式
调用 ImageCapture
接口的 getPhotoSettings()
方法获取目前的配置,返回一个对象
redEyeReduction
属性返回一个布尔值,表示相机是否启用了红眼模式
imageHeight
属性返回一个数字,表示相机设备提供的照片高度
imageWidth
属性返回一个数字,表示相机设备提供的照片宽度
fillLightMode
属性返回一个字符串,值为 auto
off
flash
之一,表示相机启用的闪光模式
两方法在当前传输视频轨道的 readyState
不为 live
,抛出 InvalidStateError
异常
两方法在因为其他未知原因无法完成操作,抛出 OperationError
异常
相关参数
whiteBalanceMode
参数,表示白平衡模式,值为 auto
manual
single-shot
continuous
之一
exposureMode
参数,表示曝光模式,值为 auto
manual
single-shot
continuous
之一
focusMode
参数,表示对焦模式,值为 auto
manual
single-shot
continuous
之一
pointsOfInterest
参数,表示兴趣点/测光中心(通过自动对焦、自动曝光、自动白平衡调整),值为一个 Point2D
数组
exposureCompensation
参数,表示曝光补偿,值为一个数值
exposureTime
参数,表示曝光时间,值为一个数值
colorTemperature
参数,表示色温,值为一个数值
iso
参数,表示 ISO 感光度,值为一个数值
brightness
参数,表示亮度,值为一个数值
contrast
参数,表示对比度,值为一个数值
saturation
参数,表示饱和度,值为一个数值
sharpness
参数,表示清晰度,值为一个数值
focusDistance
参数,表示焦距,值为一个数值
pan
参数,表示平移,值为一个数值
tilt
参数,表示倾斜,值为一个数值
zoom
参数,表示变焦比例,值为一个数值
torch
参数,表示补光模式,值为一个布尔值
这些参数被拓展至以下一些结构:
MediaTrackSupportedConstraints
结构
MediaTrackConstraintSet
结构(从而拓展至 MediaTrackConstraints
结构)
MediaTrackSettings
结构
MediaTrackCapabilities
(不含 pointsOfInterest
参数)结构
这些参数在图片捕获的媒体流中可用
类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 interface ImageCapture { takePhoto (photoSettings?: PhotoSettings ): Promise <Blob > getPhotoCapabilities (): Promise <PhotoCapabilities > getPhotoSettings (): Promise <PhotoSettings > grabFrame (): Promise <ImageBitmap > readonly track : MediaStreamTrack } declare var ImageCapture : { prototype : ImageCapture new (videoTrack : MediaStreamTrack ): ImageCapture } interface PhotoCapabilities { redEyeReduction : RedEyeReduction imageHeight : MediaSettingsRange imageWidth : MediaSettingsRange fillLightMode : FillLightMode [] } interface PhotoSettings { fillLightMode : FillLightMode imageHeight : number imageWidth : number redEyeReduction : boolean } interface MediaSettingsRange { max : number min : number step : number } type RedEyeReduction = "never" | "always" | "controllable" type FillLightMode = "auto" | "off" | "flash" interface MediaTrackSupportedConstraints { whiteBalanceMode?: boolean exposureMode?: boolean focusMode?: boolean pointsOfInterest?: boolean exposureCompensation?: boolean exposureTime?: boolean colorTemperature?: boolean iso?: boolean brightness?: boolean contrast?: boolean saturation?: boolean sharpness?: boolean focusDistance?: boolean pan?: boolean tilt?: boolean zoom?: boolean torch?: boolean } interface MediaTrackCapabilities { whiteBalanceMode?: string [] exposureMode?: string [] focusMode?: string [] exposureCompensation?: MediaSettingsRange exposureTime?: MediaSettingsRange colorTemperature?: MediaSettingsRange iso?: MediaSettingsRange brightness?: MediaSettingsRange contrast?: MediaSettingsRange saturation?: MediaSettingsRange sharpness?: MediaSettingsRange focusDistance?: MediaSettingsRange pan?: MediaSettingsRange tilt?: MediaSettingsRange zoom?: MediaSettingsRange torch?: boolean [] } interface MediaTrackConstraintSet { whiteBalanceMode?: ConstrainDOMString exposureMode?: ConstrainDOMString focusMode?: ConstrainDOMString pointsOfInterest?: ConstrainPoint2D exposureCompensation?: ConstrainDouble exposureTime?: ConstrainDouble colorTemperature?: ConstrainDouble iso?: ConstrainDouble brightness?: ConstrainDouble contrast?: ConstrainDouble saturation?: ConstrainDouble sharpness?: ConstrainDouble focusDistance?: ConstrainDouble pan?: ConstrainDouble | boolean tilt?: ConstrainDouble | boolean zoom?: ConstrainDouble | boolean torch?: ConstrainBoolean } interface MediaTrackSettings { whiteBalanceMode?: string exposureMode?: string focusMode?: string pointsOfInterest?: Point2D [] exposureCompensation?: number exposureTime?: number colorTemperature?: number iso?: number brightness?: number contrast?: number saturation?: number sharpness?: number focusDistance?: number pan?: number tilt?: number zoom?: number torch?: boolean } interface ConstrainPoint2DParameters { exact : Point2D [] ideal : Point2D [] } type ConstrainPoint2D = Point2D [] | ConstrainPoint2DParameters type MeteringMode = "none" | "manual" | "single-shot" | "continuous" interface Point2D { x?: number y?: number }
链接