1cb93a386Sopenharmony_ci# ImageDecoder API
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_ciDate Updated: June 16, 2020
4cb93a386Sopenharmony_ci
5cb93a386Sopenharmony_ci## Summary and Links
6cb93a386Sopenharmony_ci
7cb93a386Sopenharmony_ciThe [ImageDecoder API](https://github.com/dalecurtis/image-decoder-api/blob/master/explainer.md)
8cb93a386Sopenharmony_cihandles decoding of both still and animated images.
9cb93a386Sopenharmony_ciSimilar to the larger [web codecs](https://github.com/WICG/web-codecs/blob/master/explainer.md)
10cb93a386Sopenharmony_ciproposal which is focused more on video and audio.
11cb93a386Sopenharmony_ciThe ImageDecoder API could be used with `CanvasKit.MakeImageFromCanvasImageSource`
12cb93a386Sopenharmony_cifor creating CanvasKit compatible `SkImage`s.
13cb93a386Sopenharmony_ciFor still images, the `createImageBitmap(blob)` API achieves the same result.
14cb93a386Sopenharmony_ci
15cb93a386Sopenharmony_ci- [Explainer](https://github.com/dalecurtis/image-decoder-api/blob/master/explainer.md)
16cb93a386Sopenharmony_ci- [Prototype](https://chromium-review.googlesource.com/c/chromium/src/+/2145133)
17cb93a386Sopenharmony_ci- [Discourse](https://discourse.wicg.io/t/proposal-imagedecoder-api-extension-for-webcodecs/4418)
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_ciCurrently available as a prototype behind the `--enable-blink-features=WebCodecs` flag
20cb93a386Sopenharmony_ciin Chrome Canary, works in version 85.0.4175.0.
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_ci## Running the prototype
23cb93a386Sopenharmony_ci
24cb93a386Sopenharmony_ci1. Download and install [Chrome Canary](https://www.google.com/chrome/canary/). Verify that you
25cb93a386Sopenharmony_cihave version 85.0.4175.0 or later.
26cb93a386Sopenharmony_ci2. Close ALL open instances of chromium browsers, including chrome.
27cb93a386Sopenharmony_ci2. Run Chrome Canary with the `--enable-blink-features=WebCodecs` flag.
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_ci**MacOS**: Run `/applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --enable-blink-features=WebCodecs`
30cb93a386Sopenharmony_ci
31cb93a386Sopenharmony_ci**Windows, Linux**: [https://www.chromium.org/developers/how-tos/run-chromium-with-flags](https://www.chromium.org/developers/how-tos/run-chromium-with-flags)
32cb93a386Sopenharmony_ci
33cb93a386Sopenharmony_ci3. Navigate to: [http://storage.googleapis.com/dalecurtis/test-gif.html?src=giphy.gif](http://storage.googleapis.com/dalecurtis/test-gif.html?src=giphy.gif)
34cb93a386Sopenharmony_ci4. You should see a cute animated cat illustration.
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_ci## Example API Usage with CanvasKit
37cb93a386Sopenharmony_ci
38cb93a386Sopenharmony_ciWith a still image:
39cb93a386Sopenharmony_ci```jsx
40cb93a386Sopenharmony_ciconst response = await fetch(stillImageUrl); // e.g. png or jpeg
41cb93a386Sopenharmony_ciconst data = await response.arrayBuffer();
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ciconst imageDecoder = new ImageDecoder({ data });
44cb93a386Sopenharmony_ciconst imageBitmap = await imageDecoder.decode();
45cb93a386Sopenharmony_ci
46cb93a386Sopenharmony_ciconst skImage = CanvasKit.MakeImageFromCanvasImageSource(imageBitmap);
47cb93a386Sopenharmony_ci// do something with skImage, such as drawing it
48cb93a386Sopenharmony_ci```
49cb93a386Sopenharmony_ci
50cb93a386Sopenharmony_ciWith an animated image:
51cb93a386Sopenharmony_ci```jsx
52cb93a386Sopenharmony_ciconst response = await fetch(animatedImageUrl); // e.g. gif or mjpeg
53cb93a386Sopenharmony_ciconst data = await response.arrayBuffer();
54cb93a386Sopenharmony_ci
55cb93a386Sopenharmony_ciconst imageDecoder = new ImageDecoder({ data });
56cb93a386Sopenharmony_ci
57cb93a386Sopenharmony_cifor (let frame = 0; frame < imageDecoder.frameCount; frame++) {
58cb93a386Sopenharmony_ci    const imageBitmap = await imageDecoder.decode(frame);
59cb93a386Sopenharmony_ci    const skImage = CanvasKit.MakeImageFromCanvasImageSource(imageBitmap);
60cb93a386Sopenharmony_ci    // do something with skImage, such as drawing it
61cb93a386Sopenharmony_ci}
62cb93a386Sopenharmony_ci```
63