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

瀏覽器相容性