ImageDecoder
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Dedicated Web Workers.
Giao diện ImageDecoder của WebCodecs API cung cấp cách để giải nén và giải mã dữ liệu hình ảnh đã mã hóa.
Hàm khởi tạo
ImageDecoder()-
Tạo một đối tượng
ImageDecodermới.
Thuộc tính phiên bản
ImageDecoder.completeRead only-
Trả về một giá trị boolean cho biết dữ liệu đã mã hóa có được lưu vào bộ đệm hoàn toàn hay không.
ImageDecoder.completedRead only-
Trả về một
Promiseđược giải quyết khicompletelà true. ImageDecoder.tracksRead only-
Trả về một đối tượng
ImageTrackListliệt kê các track có sẵn và cung cấp phương thức để chọn một track cần giải mã. ImageDecoder.typeRead only-
Trả về một chuỗi phản ánh kiểu MIME được cấu hình trong quá trình khởi tạo.
Phương thức tĩnh
ImageDecoder.isTypeSupported()-
Cho biết liệu kiểu MIME được cung cấp có được hỗ trợ để giải nén và giải mã không.
Phương thức phiên bản
ImageDecoder.close()-
Kết thúc tất cả công việc đang chờ và giải phóng tài nguyên hệ thống.
ImageDecoder.decode()-
Thêm một thông điệp điều khiển vào hàng đợi để giải mã một khung của hình ảnh.
ImageDecoder.reset()-
Hủy tất cả các thao tác
decode()đang chờ.
Ví dụ
Với một phần tử <canvas>:
<canvas></canvas>
đoạn code sau đây giải mã và hiển thị một hình ảnh động lên canvas đó:
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));
Thông số kỹ thuật
| Specification |
|---|
| WebCodecs> # imagedecoder-interface> |