// 导入wasm模块 let wasmModule; var Module = { onRuntimeInitialized: function (e) { // let baseData= document.getElementById("base64Image").src; // baseData=baseData.split(",")[1]; // let buffer = base64ToArrayBuffer(baseData); // decodeToWebpp(buffer); // document.getElementById("base64Image").src = fileurl; // decodeIt(); postMessage({ type: 'ready' }); console.log(Module._malloc(4)) }, onAbort: (e) => { alert(e); } }; // 初始化wasm模块 self.importScripts('convert_image_to_webp.js'); // CreateModule().then(module => { // wasmModule = module; // postMessage({ type: 'ready' }); // }).catch(err => { // postMessage({ type: 'error', error: 'Failed to load WASM module: ' + err.message }); // }); // 处理主线程发来的消息 self.onmessage = async function (e) { const { buffer, width, height, quality, } = e.data; // 显示原始图片大小 let size = (buffer.byteLength / 1024).toFixed(2); // 转换图像为 Uint8Array var inputData = new Uint8Array(buffer); // 分配内存以存储输出 WebP 大小 var outputSizePtr = Module._malloc(4); // 存储输出大小的指针 // 设置目标宽高和质量因子 var inputDataPtr = Module._malloc(inputData.length); Module.HEAPU8.set(inputData, inputDataPtr); var webpPtr = Module._convert_image_to_webp(inputDataPtr, inputData.length, width, height,0,0, quality, outputSizePtr); // 调用 WebAssembly 函数进行图像转换,返回 WebP 数据指针 // 获取 WebP 数据大小 var outputSize = Module.getValue(outputSizePtr, 'i32'); // 从 WebAssembly 内存中读取 WebP 数据 var webpData = new Uint8Array(Module.HEAPU8.buffer, webpPtr, outputSize); // document.getElementById('result').innerText += ' ' + (Date.now() - startTime) + 'ms'; // 显示 WebP 图片大小 // document.getElementById("webpSize").textContent = `${size}KB => ${(outputSize / 1024).toFixed(2)}KB`; // 将 WebP 数据转换为 base64,并显示 // let img = document.getElementById("webpImage"); // img.src = "data:image/webp;base64," + arrayBufferToBase64(webpData); // 使用完成后释放内存 Module._free(outputSizePtr); Module._free(webpPtr); Module._free(inputDataPtr); postMessage({ type: 'webp', webpData }); };