ImageDecoder: decode() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 专用 Web Workers 中可用。

ImageDecoder 接口的 decode() 方法用于将一个控制消息加入队列,以解码图像的某一帧。

语法

js
decode()
decode(options)

参数

options 可选

包含以下成员的对象

frameIndex 可选

一个整数,表示要解码的帧的索引。默认为 0(第一帧)。

completeFramesOnly 可选

一个 boolean 值,默认为 true。当设置为 false 时,表示对于渐进式图像,解码器可能会输出一个细节程度较低的图像。当设置为 false 时,decode() 返回的 Promise 将针对每个新的细节级别解析一次。

返回值

一个 Promise,它会解析为一个包含以下成员的对象:

图片

一个 VideoFrame,包含已解码的图像。

完成

一个 boolean 值,如果为 true,则表示 image 包含最终的完整细节输出。

异常

如果发生错误,Promise 将会解析为以下异常

InvalidStateError DOMException

当满足以下任一条件时返回

  • close 为 true,表示 close() 已经被调用。
  • 请求的帧不存在。

示例

已完成图像帧的同步解码

以下示例解码第二帧(索引为 1)并将结果 VideoFrame 打印到控制台。

js
let result = await imageDecoder.decode({ frameIndex: 1 });
console.log(result.image);

渐进式图像帧的部分解码

以下示例反复解码第一帧,直到其完整。

js
let complete = false;
while (!complete) {
  // The promise returned by `decode()` will only resolve when a new
  // level of detail is available or the frame is complete. I.e.,
  // calling `decode()` in a loop like this is won't needlessly spin.
  let result = await imageDecode.decode({ completeFramesOnly: false });

  // Do something with `result.image`.

  complete = result.complete;
}

规范

规范
WebCodecs
# dom-imagedecoder-decode

浏览器兼容性