| (function(window) { |
| |
| let CanvasKit = null; |
| |
| window.loadPolyfill = () => { |
| return CanvasKitInit({ |
| locateFile: (file) => 'https://unpkg.com/canvaskit-wasm@0.6.0/bin/'+file, |
| }).ready().then((CK) => { |
| CanvasKit = CK; |
| }); |
| } |
| |
| window.createImageData = (src, options) => { |
| const skImg = CanvasKit.MakeImageFromEncoded(src); |
| // we know width and height |
| const imageInfo = { |
| width: options.resizeWidth || skImg.width(), |
| height: options.resizeHeight || skImg.height(), |
| alphaType: options.premul ? CanvasKit.AlphaType.Premul : CanvasKit.AlphaType.Unpremul, |
| } |
| switch (options.colorType) { |
| case "float32": |
| imageInfo.colorType = CanvasKit.ColorType.RGBA_F32; |
| break; |
| |
| case "uint8": |
| default: |
| imageInfo.colorType = CanvasKit.ColorType.RGBA_8888; |
| break; |
| } |
| |
| const pixels = skImg.readPixels(imageInfo, 0, 0); |
| let output; |
| // ImageData at the moment only supports Uint8, so we have to convert our numbers to that |
| switch (options.colorType) { |
| case "float32": |
| // This will make an extra copy, which is a limitation of the native Browser's |
| // ImageData support. |
| output = new Uint8ClampedArray(pixels); |
| break; |
| |
| case "uint8": |
| default: |
| // We can cast w/o another copy |
| output = new Uint8ClampedArray(pixels.buffer); |
| break; |
| } |
| |
| |
| const ret = new ImageData(output, imageInfo.width, imageInfo.height); |
| skImg.delete(); |
| |
| return ret; |
| } |
| |
| |
| })(window); |