files/en-us/web/api/imagedecoder/decode/index.md
{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The decode() method of the {{domxref("ImageDecoder")}} interface enqueues a control message to decode the frame of an image.
decode()
decode(options)
options {{optional_inline}}
frameIndex {{optional_inline}}
0 (the first frame).completeFramesOnly {{optional_inline}}
true.
When true, the Promise returned by the method resolves only when the image is fully decoded.
When false, the method will return a new Promise that may resolve with a partially decoded image.
The method can be called repeatedly until result.complete is true, with each step providing an image with the next available level of detail.A {{jsxref("promise")}} that resolves with an object containing the following members:
image
complete
true indicates that image contains the final full-detail output.If an error occurs, the promise will resolve with following exception:
InvalidStateError {{domxref("DOMException")}}
close is true, meaning {{domxref("ImageDecoder.close()","close()")}} has already been called.The following example decodes the second frame (at index 1) and prints the resulting {{domxref("VideoFrame")}} to the console.
let result = await imageDecoder.decode({ frameIndex: 1 });
console.log(result.image);
The following example decodes the first frame repeatedly until its complete:
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 won't needlessly spin.
let result = await imageDecoder.decode({ completeFramesOnly: false });
// Do something with `result.image`.
complete = result.complete;
}
{{Specifications}}
{{Compat}}