ImageDecoder
Ограниченная доступность
Эта функция не относится к Baseline, поскольку она не работает в некоторых из наиболее широко используемых браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в посвященных веб-воркерах.
Интерфейс ImageDecoder API WebCodecs предоставляет способ распаковки и декодирования закодированных данных изображения.
Конструктор
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>:
<canvas></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));
Спецификации
| Спецификация |
|---|
| WebCodecs # imagedecoder-interface |
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
ImageDecoder |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
ImageDecoder |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
close |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
complete |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
completed |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
decode |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
isTypeSupported_static |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
reset |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
tracks |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
type |
94 | 94 | 133 | 80 | Нет | 94 | 133 | 66 | Нет | 17.0 | 94 |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ImageDecoder