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