mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-13 17:27:09 +00:00
- 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.
19 lines
767 B
TypeScript
19 lines
767 B
TypeScript
import webp_enc, { WebPModule } from '../../../codecs/webp/enc/webp_enc';
|
||
import wasmUrl from '../../../codecs/webp/enc/webp_enc.wasm';
|
||
import { EncodeOptions } from './encoder-meta';
|
||
import { initEmscriptenModule } from '../util';
|
||
|
||
let emscriptenModule: Promise<WebPModule>;
|
||
|
||
export async function encode(data: ImageData, options: EncodeOptions): Promise<ArrayBuffer> {
|
||
if (!emscriptenModule) emscriptenModule = initEmscriptenModule(webp_enc, wasmUrl);
|
||
|
||
const module = await emscriptenModule;
|
||
const resultView = module.encode(data.data, data.width, data.height, options);
|
||
const result = new Uint8Array(resultView);
|
||
module.free_result();
|
||
|
||
// wasm can’t run on SharedArrayBuffers, so we hard-cast to ArrayBuffer.
|
||
return result.buffer as ArrayBuffer;
|
||
}
|