forked from external-repos/squoosh
- Store Emscripten cache inside node_modules/.em_cache. Docker image ships without LTO libs, so Emscripten has to rebuild stdlibs on every build otherwise. - Merge webp_enc + webp_dec build scripts. Core libwebp library is same in both cases, so there's no point in storing and building two copies of it.
21 lines
632 B
TypeScript
21 lines
632 B
TypeScript
import webp_dec, { WebPModule } from '../../../codecs/webp/dec/webp_dec';
|
|
import wasmUrl from '../../../codecs/webp/dec/webp_dec.wasm';
|
|
import { initEmscriptenModule } from '../util';
|
|
|
|
let emscriptenModule: Promise<WebPModule>;
|
|
|
|
export async function decode(data: ArrayBuffer): Promise<ImageData> {
|
|
if (!emscriptenModule) emscriptenModule = initEmscriptenModule(webp_dec, wasmUrl);
|
|
|
|
const module = await emscriptenModule;
|
|
const rawImage = module.decode(data);
|
|
const result = new ImageData(
|
|
new Uint8ClampedArray(rawImage.buffer),
|
|
rawImage.width,
|
|
rawImage.height,
|
|
);
|
|
|
|
module.free_result();
|
|
return result;
|
|
}
|