1*c8dee2aaSAndroid Build Coastguard Worker(function(window) { 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workerlet CanvasKit = null; 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Workerwindow.loadPolyfill = () => { 6*c8dee2aaSAndroid Build Coastguard Worker // TODO(kjlubick): change ready().then() to just then() when using a newer version 7*c8dee2aaSAndroid Build Coastguard Worker // from npm (see 8*c8dee2aaSAndroid Build Coastguard Worker // https://skia.googlesource.com/skia/+/d1285b131bcf9c10fe1ad16fd2830c556715ed9e) 9*c8dee2aaSAndroid Build Coastguard Worker return CanvasKitInit({ 10*c8dee2aaSAndroid Build Coastguard Worker locateFile: (file) => 'https://unpkg.com/[email protected]/bin/'+file, 11*c8dee2aaSAndroid Build Coastguard Worker }).ready().then((CK) => { 12*c8dee2aaSAndroid Build Coastguard Worker CanvasKit = CK; 13*c8dee2aaSAndroid Build Coastguard Worker }); 14*c8dee2aaSAndroid Build Coastguard Worker} 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Workerwindow.createImageData = (src, options) => { 17*c8dee2aaSAndroid Build Coastguard Worker const skImg = CanvasKit.MakeImageFromEncoded(src); 18*c8dee2aaSAndroid Build Coastguard Worker // we know width and height 19*c8dee2aaSAndroid Build Coastguard Worker const imageInfo = { 20*c8dee2aaSAndroid Build Coastguard Worker width: options.resizeWidth || skImg.width(), 21*c8dee2aaSAndroid Build Coastguard Worker height: options.resizeHeight || skImg.height(), 22*c8dee2aaSAndroid Build Coastguard Worker alphaType: options.premul ? CanvasKit.AlphaType.Premul : CanvasKit.AlphaType.Unpremul, 23*c8dee2aaSAndroid Build Coastguard Worker } 24*c8dee2aaSAndroid Build Coastguard Worker switch (options.colorType) { 25*c8dee2aaSAndroid Build Coastguard Worker case "float32": 26*c8dee2aaSAndroid Build Coastguard Worker imageInfo.colorType = CanvasKit.ColorType.RGBA_F32; 27*c8dee2aaSAndroid Build Coastguard Worker break; 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker case "uint8": 30*c8dee2aaSAndroid Build Coastguard Worker default: 31*c8dee2aaSAndroid Build Coastguard Worker imageInfo.colorType = CanvasKit.ColorType.RGBA_8888; 32*c8dee2aaSAndroid Build Coastguard Worker break; 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker const pixels = skImg.readPixels(imageInfo, 0, 0); 36*c8dee2aaSAndroid Build Coastguard Worker let output; 37*c8dee2aaSAndroid Build Coastguard Worker // ImageData at the moment only supports Uint8, so we have to convert our numbers to that 38*c8dee2aaSAndroid Build Coastguard Worker switch (options.colorType) { 39*c8dee2aaSAndroid Build Coastguard Worker case "float32": 40*c8dee2aaSAndroid Build Coastguard Worker // This will make an extra copy, which is a limitation of the native Browser's 41*c8dee2aaSAndroid Build Coastguard Worker // ImageData support. 42*c8dee2aaSAndroid Build Coastguard Worker output = new Uint8ClampedArray(pixels); 43*c8dee2aaSAndroid Build Coastguard Worker break; 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker case "uint8": 46*c8dee2aaSAndroid Build Coastguard Worker default: 47*c8dee2aaSAndroid Build Coastguard Worker // We can cast w/o another copy 48*c8dee2aaSAndroid Build Coastguard Worker output = new Uint8ClampedArray(pixels.buffer); 49*c8dee2aaSAndroid Build Coastguard Worker break; 50*c8dee2aaSAndroid Build Coastguard Worker } 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker const ret = new ImageData(output, imageInfo.width, imageInfo.height); 54*c8dee2aaSAndroid Build Coastguard Worker skImg.delete(); 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker return ret; 57*c8dee2aaSAndroid Build Coastguard Worker} 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker})(window); 61