建構函式
ImageDecoder()-
建立一個新的
ImageDecoder物件。
例項屬性
ImageDecoder.complete只讀-
返回一個布林值,指示編碼資料是否已完全緩衝。
ImageDecoder.completed只讀-
返回一個
Promise,當complete為 true 時解析。 ImageDecoder.tracks只讀-
返回一個
ImageTrackList物件,列出可用的軌道並提供選擇要解碼的軌道的方法。 ImageDecoder.type只讀-
返回一個字串,反映構造期間配置的 MIME 型別。
靜態方法
ImageDecoder.isTypeSupported()-
指示提供的 MIME 型別 是否支援解包和解碼。
例項方法
ImageDecoder.close()-
結束所有待處理的工作並釋放系統資源。
ImageDecoder.decode()-
將解碼影像幀的控制訊息加入佇列。
ImageDecoder.reset()-
中止所有掛起的
decode()操作。
示例
給定一個 <canvas> 元素
html
<canvas></canvas>
以下程式碼會將動畫影像解碼並渲染到該畫布上
js
let imageDecoder = null;
let imageIndex = 0;
function renderImage(result) {
const canvas = document.querySelector("canvas");
const canvasContext = canvas.getContext("2d");
canvasContext.drawImage(result.image, 0, 0);
const track = imageDecoder.tracks.selectedTrack;
// We check complete here since `frameCount` won't be stable until all
// data has been received. This may cause us to receive a RangeError
// during the decode() call below which needs to be handled.
if (imageDecoder.complete) {
if (track.frameCount === 1) return;
if (imageIndex + 1 >= track.frameCount) imageIndex = 0;
}
// Decode the next frame ahead of display so it's ready in time.
imageDecoder
.decode({ frameIndex: ++imageIndex })
.then((nextResult) =>
setTimeout(() => {
renderImage(nextResult);
}, result.image.duration / 1000.0),
)
.catch((e) => {
// We can end up requesting an imageIndex past the end since
// we're using a ReadableStream from fetch(), when this happens
// just wrap around.
if (e instanceof RangeError) {
imageIndex = 0;
imageDecoder.decode({ frameIndex: imageIndex }).then(renderImage);
} else {
throw e;
}
});
}
function decodeImage(imageByteStream) {
imageDecoder = new ImageDecoder({ data: imageByteStream, type: "image/gif" });
imageDecoder.decode({ frameIndex: imageIndex }).then(renderImage);
}
fetch("fancy.gif").then((response) => decodeImage(response.body));
規範
| 規範 |
|---|
| WebCodecs # imagedecoder-interface |
瀏覽器相容性
載入中…