vue3-image-compressor 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -2
- package/dist/assets/imageWorker-B_HCdCy9.js +24 -0
- package/dist/vue-image-compressor.js +98 -100
- package/dist/vue-image-compressor.umd.cjs +1 -1
- package/package.json +1 -1
- package/src/composables/useWorker.ts +1 -2
- package/src/utils/compressFile.ts +1 -2
- package/src/workers/imageWorker.ts +1 -1
- package/dist/assets/imageWorker-Qv3pCULy.js +0 -1042
package/README.md
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
## 🚀 在线 Demo
|
|
6
6
|
|
|
7
|
-
[
|
|
7
|
+
**👉 [点击在线体验 Demo](https://think_chl.github.io/vue-compressor/)**
|
|
8
|
+
|
|
9
|
+
直接上传图片即可试用,无需安装。也可以使用下面的徽章快速访问:
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
[](https://think_chl.github.io/vue-compressor/)
|
|
10
12
|
|
|
11
13
|
## 架构分析
|
|
12
14
|
|
|
@@ -147,6 +149,67 @@ async function simpleCompress(file: File, quality: number): Promise<Blob> {
|
|
|
147
149
|
}
|
|
148
150
|
```
|
|
149
151
|
|
|
152
|
+
### 4. 手动压缩函数(compressFile)
|
|
153
|
+
|
|
154
|
+
如果需要更灵活地控制压缩流程,可以直接使用 `compressFile` 函数。它支持所有 WASM 编码器,返回完整的压缩结果信息,并且支持通过 `AbortSignal` 取消任务。
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import { compressFile } from 'vue-image-compressor'
|
|
158
|
+
|
|
159
|
+
async function handleCompress(file: File) {
|
|
160
|
+
const result = await compressFile(file, {
|
|
161
|
+
encoder: 'mozJPEG', // 可选:编码器类型,默认 'mozJPEG'
|
|
162
|
+
encoderOptions: { quality: 75 }, // 可选:编码器参数,不传则使用默认值
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
console.log('压缩前:', result.originalSize)
|
|
166
|
+
console.log('压缩后:', result.compressedSize)
|
|
167
|
+
console.log('节省:', result.savingsPercent + '%')
|
|
168
|
+
console.log('尺寸:', result.width, 'x', result.height)
|
|
169
|
+
|
|
170
|
+
// 直接上传压缩后的 File 对象
|
|
171
|
+
upload(result.file)
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### 支持取消(AbortController)
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
const controller = new AbortController()
|
|
179
|
+
|
|
180
|
+
// 开始压缩
|
|
181
|
+
const promise = compressFile(file, {
|
|
182
|
+
encoder: 'avif',
|
|
183
|
+
encoderOptions: { cqLevel: 20 },
|
|
184
|
+
signal: controller.signal, // 传入 AbortSignal
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
// 用户点击取消时
|
|
188
|
+
controller.abort()
|
|
189
|
+
|
|
190
|
+
try {
|
|
191
|
+
await promise
|
|
192
|
+
} catch (err) {
|
|
193
|
+
if (err.name === 'AbortError') {
|
|
194
|
+
console.log('压缩已取消')
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### 返回值说明
|
|
200
|
+
|
|
201
|
+
| 字段 | 类型 | 说明 |
|
|
202
|
+
|------|------|------|
|
|
203
|
+
| `file` | `File` | 压缩后的文件对象,可直接上传或下载 |
|
|
204
|
+
| `originalSize` | `number` | 原始文件大小(字节) |
|
|
205
|
+
| `compressedSize` | `number` | 压缩后文件大小(字节) |
|
|
206
|
+
| `savingsBytes` | `number` | 节省的字节数 |
|
|
207
|
+
| `savingsPercent` | `number` | 节省百分比 |
|
|
208
|
+
| `width` | `number` | 图片宽度 |
|
|
209
|
+
| `height` | `number` | 图片高度 |
|
|
210
|
+
| `encoderType` | `string` | 实际使用的编码器类型 |
|
|
211
|
+
| `encoderOptions` | `object` | 实际使用的编码器参数(含默认值) |
|
|
212
|
+
|
|
150
213
|
## 编码器支持
|
|
151
214
|
|
|
152
215
|
| 编码器 | 类型 | 质量参数 | 说明 |
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
(function(){"use strict";function Nr(c,l){return c({noInitialRun:!0,locateFile:l==null?void 0:l.locateFile})}var Jr=function(){var c=self.location.href;return function(i){i=i||{};var i=typeof i<"u"?i:{},v,_;i.ready=new Promise(function(r,e){v=r,_=e});var p={},m;for(m in i)i.hasOwnProperty(m)&&(p[m]=i[m]);var or="./this.program",W=function(r,e){throw e},Qr=!0,P="";function Xr(r){return i.locateFile?i.locateFile(r,P):P+r}var ar;P=self.location.href,c&&(P=c),P.indexOf("blob:")!==0?P=P.substr(0,P.lastIndexOf("/")+1):P="",ar=function(r){var e=new XMLHttpRequest;return e.open("GET",r,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)};var Yr=i.print||console.log.bind(console),O=i.printErr||console.warn.bind(console);for(m in p)p.hasOwnProperty(m)&&(i[m]=p[m]);p=null,i.arguments&&i.arguments,i.thisProgram&&(or=i.thisProgram),i.quit&&(W=i.quit);var q;i.wasmBinary&&(q=i.wasmBinary),i.noExitRuntime,typeof WebAssembly!="object"&&Q("no native wasm support detected");var J,yr=!1,mr=new TextDecoder("utf8");function $r(r,e,n){for(var t=e+n,a=e;r[a]&&!(a>=t);)++a;return mr.decode(r.subarray?r.subarray(e,a):new Uint8Array(r.slice(e,a)))}function wr(r,e){if(!r)return"";for(var n=r+e,t=r;!(t>=n)&&y[t];)++t;return mr.decode(y.subarray(r,t))}function Kr(r,e,n,t){if(!(t>0))return 0;for(var a=n,u=n+t-1,f=0;f<r.length;++f){var o=r.charCodeAt(f);if(o>=55296&&o<=57343){var s=r.charCodeAt(++f);o=65536+((o&1023)<<10)|s&1023}if(o<=127){if(n>=u)break;e[n++]=o}else if(o<=2047){if(n+1>=u)break;e[n++]=192|o>>6,e[n++]=128|o&63}else if(o<=65535){if(n+2>=u)break;e[n++]=224|o>>12,e[n++]=128|o>>6&63,e[n++]=128|o&63}else{if(n+3>=u)break;e[n++]=240|o>>18,e[n++]=128|o>>12&63,e[n++]=128|o>>6&63,e[n++]=128|o&63}}return e[n]=0,n-a}function Zr(r,e,n){return Kr(r,y,e,n)}function re(r){for(var e=0,n=0;n<r.length;++n){var t=r.charCodeAt(n);t>=55296&&t<=57343&&(t=65536+((t&1023)<<10)|r.charCodeAt(++n)&1023),t<=127?++e:t<=2047?e+=2:t<=65535?e+=3:e+=4}return e}var ee=new TextDecoder("utf-16le");function ne(r,e){for(var n=r,t=n>>1,a=t+e/2;!(t>=a)&&G[t];)++t;return n=t<<1,ee.decode(y.subarray(r,n))}function te(r,e,n){if(n===void 0&&(n=2147483647),n<2)return 0;n-=2;for(var t=e,a=n<r.length*2?n/2:r.length,u=0;u<a;++u){var f=r.charCodeAt(u);V[e>>1]=f,e+=2}return V[e>>1]=0,e-t}function ie(r){return r.length*2}function oe(r,e){for(var n=0,t="";!(n>=e/4);){var a=w[r+n*4>>2];if(a==0)break;if(++n,a>=65536){var u=a-65536;t+=String.fromCharCode(55296|u>>10,56320|u&1023)}else t+=String.fromCharCode(a)}return t}function ae(r,e,n){if(n===void 0&&(n=2147483647),n<4)return 0;for(var t=e,a=t+n-4,u=0;u<r.length;++u){var f=r.charCodeAt(u);if(f>=55296&&f<=57343){var o=r.charCodeAt(++u);f=65536+((f&1023)<<10)|o&1023}if(w[e>>2]=f,e+=4,e+4>a)break}return w[e>>2]=0,e-t}function ue(r){for(var e=0,n=0;n<r.length;++n){var t=r.charCodeAt(n);t>=55296&&t<=57343&&++n,e+=4}return e}function fe(r,e,n){for(var t=0;t<r.length;++t)L[e++>>0]=r.charCodeAt(t);L[e>>0]=0}function ce(r,e){return r%e>0&&(r+=e-r%e),r}var ur,L,y,V,G,w,F,br,Ar;function Tr(r){ur=r,i.HEAP8=L=new Int8Array(r),i.HEAP16=V=new Int16Array(r),i.HEAP32=w=new Int32Array(r),i.HEAPU8=y=new Uint8Array(r),i.HEAPU16=G=new Uint16Array(r),i.HEAPU32=F=new Uint32Array(r),i.HEAPF32=br=new Float32Array(r),i.HEAPF64=Ar=new Float64Array(r)}i.INITIAL_MEMORY;var x,Er=[],Cr=[],Pr=[];function se(){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)ge(i.preRun.shift());fr(Er)}function le(){fr(Cr)}function de(){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)he(i.postRun.shift());fr(Pr)}function ge(r){Er.unshift(r)}function ve(r){Cr.unshift(r)}function he(r){Pr.unshift(r)}var M=0,z=null;function pe(r){M++,i.monitorRunDependencies&&i.monitorRunDependencies(M)}function _e(r){if(M--,i.monitorRunDependencies&&i.monitorRunDependencies(M),M==0&&z){var e=z;z=null,e()}}i.preloadedImages={},i.preloadedAudios={};function Q(r){i.onAbort&&i.onAbort(r),r+="",O(r),yr=!0,r="abort("+r+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(r);throw _(e),e}var ye="data:application/octet-stream;base64,";function Fr(r){return r.startsWith(ye)}if(i.locateFile){var E="mozjpeg_enc.wasm";Fr(E)||(E=Xr(E))}else var E=new URL(""+new URL("../codecs/mozjpeg/enc/mozjpeg_enc.wasm",self.location.href).href,self.location.href).toString();function Rr(r){try{if(r==E&&q)return new Uint8Array(q);if(ar)return ar(r);throw"both async and sync fetching of the wasm failed"}catch(e){Q(e)}}function me(){return!q&&Qr&&typeof fetch=="function"?fetch(E,{credentials:"same-origin"}).then(function(r){if(!r.ok)throw"failed to load wasm binary file at '"+E+"'";return r.arrayBuffer()}).catch(function(){return Rr(E)}):Promise.resolve().then(function(){return Rr(E)})}function we(){var r={a:wn};function e(f,o){var s=f.exports;i.asm=s,J=i.asm.C,Tr(J.buffer),x=i.asm.I,ve(i.asm.D),_e()}pe();function n(f){e(f.instance)}function t(f){return me().then(function(o){var s=WebAssembly.instantiate(o,r);return s}).then(f,function(o){O("failed to asynchronously prepare wasm: "+o),Q(o)})}function a(){return!q&&typeof WebAssembly.instantiateStreaming=="function"&&!Fr(E)&&typeof fetch=="function"?fetch(E,{credentials:"same-origin"}).then(function(f){var o=WebAssembly.instantiateStreaming(f,r);return o.then(n,function(s){return O("wasm streaming compile failed: "+s),O("falling back to ArrayBuffer instantiation"),t(n)})}):t(n)}if(i.instantiateWasm)try{var u=i.instantiateWasm(r,e);return u}catch(f){return O("Module.instantiateWasm callback failed with error: "+f),!1}return a().catch(_),{}}function fr(r){for(;r.length>0;){var e=r.shift();if(typeof e=="function"){e(i);continue}var n=e.func;typeof n=="number"?e.arg===void 0?x.get(n)():x.get(n)(e.arg):n(e.arg===void 0?null:e.arg)}}function En(r,e){}function be(r,e){return void 0}var X={};function Ur(r){for(;r.length;){var e=r.pop(),n=r.pop();n(e)}}function Y(r){return this.fromWireType(F[r>>2])}var j={},k={},$={},Ae=48,Te=57;function Sr(r){if(r===void 0)return"_unknown";r=r.replace(/[^a-zA-Z0-9_]/g,"$");var e=r.charCodeAt(0);return e>=Ae&&e<=Te?"_"+r:r}function Wr(r,e){return r=Sr(r),new Function("body","return function "+r+`() {
|
|
2
|
+
"use strict"; return body.apply(this, arguments);
|
|
3
|
+
};
|
|
4
|
+
`)(e)}function cr(r,e){var n=Wr(e,function(t){this.name=e,this.message=t;var a=new Error(t).stack;a!==void 0&&(this.stack=this.toString()+`
|
|
5
|
+
`+a.replace(/^Error(:[^\n]*)?\n/,""))});return n.prototype=Object.create(r.prototype),n.prototype.constructor=n,n.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},n}var Mr=void 0;function kr(r){throw new Mr(r)}function Dr(r,e,n){r.forEach(function(o){$[o]=e});function t(o){var s=n(o);s.length!==r.length&&kr("Mismatched type converter count");for(var d=0;d<r.length;++d)R(r[d],s[d])}var a=new Array(e.length),u=[],f=0;e.forEach(function(o,s){k.hasOwnProperty(o)?a[s]=k[o]:(u.push(o),j.hasOwnProperty(o)||(j[o]=[]),j[o].push(function(){a[s]=k[o],++f,f===u.length&&t(a)}))}),u.length===0&&t(a)}function Ee(r){var e=X[r];delete X[r];var n=e.rawConstructor,t=e.rawDestructor,a=e.fields,u=a.map(function(f){return f.getterReturnType}).concat(a.map(function(f){return f.setterArgumentType}));Dr([r],u,function(f){var o={};return a.forEach(function(s,d){var g=s.fieldName,h=f[d],D=s.getter,C=s.getterContext,S=f[d+a.length],I=s.setter,H=s.setterContext;o[g]={read:function(hr){return h.fromWireType(D(C,hr))},write:function(hr,Tn){var Br=[];I(H,hr,S.toWireType(Br,Tn)),Ur(Br)}}}),[{name:e.name,fromWireType:function(s){var d={};for(var g in o)d[g]=o[g].read(s);return t(s),d},toWireType:function(s,d){for(var g in o)if(!(g in d))throw new TypeError('Missing field: "'+g+'"');var h=n();for(g in o)o[g].write(h,d[g]);return s!==null&&s.push(t,h),h},argPackAdvance:8,readValueFromPointer:Y,destructorFunction:t}]})}function Ce(r,e,n,t,a){}function sr(r){switch(r){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+r)}}function Pe(){for(var r=new Array(256),e=0;e<256;++e)r[e]=String.fromCharCode(e);Ir=r}var Ir=void 0;function b(r){for(var e="",n=r;y[n];)e+=Ir[y[n++]];return e}var Or=void 0;function A(r){throw new Or(r)}function R(r,e,n){if(n=n||{},!("argPackAdvance"in e))throw new TypeError("registerType registeredInstance requires argPackAdvance");var t=e.name;if(r||A('type "'+t+'" must have a positive integer typeid pointer'),k.hasOwnProperty(r)){if(n.ignoreDuplicateRegistrations)return;A("Cannot register type '"+t+"' twice")}if(k[r]=e,delete $[r],j.hasOwnProperty(r)){var a=j[r];delete j[r],a.forEach(function(u){u()})}}function Fe(r,e,n,t,a){var u=sr(n);e=b(e),R(r,{name:e,fromWireType:function(f){return!!f},toWireType:function(f,o){return o?t:a},argPackAdvance:8,readValueFromPointer:function(f){var o;if(n===1)o=L;else if(n===2)o=V;else if(n===4)o=w;else throw new TypeError("Unknown boolean type size: "+e);return this.fromWireType(o[f>>u])},destructorFunction:null})}var lr=[],T=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function jr(r){r>4&&--T[r].refcount===0&&(T[r]=void 0,lr.push(r))}function Re(){for(var r=0,e=5;e<T.length;++e)T[e]!==void 0&&++r;return r}function Ue(){for(var r=5;r<T.length;++r)if(T[r]!==void 0)return T[r];return null}function Se(){i.count_emval_handles=Re,i.get_first_emval=Ue}function K(r){switch(r){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:{var e=lr.length?lr.pop():T.length;return T[e]={refcount:1,value:r},e}}}function We(r,e){e=b(e),R(r,{name:e,fromWireType:function(n){var t=T[n].value;return jr(n),t},toWireType:function(n,t){return K(t)},argPackAdvance:8,readValueFromPointer:Y,destructorFunction:null})}function dr(r){if(r===null)return"null";var e=typeof r;return e==="object"||e==="array"||e==="function"?r.toString():""+r}function Me(r,e){switch(e){case 2:return function(n){return this.fromWireType(br[n>>2])};case 3:return function(n){return this.fromWireType(Ar[n>>3])};default:throw new TypeError("Unknown float type: "+r)}}function ke(r,e,n){var t=sr(n);e=b(e),R(r,{name:e,fromWireType:function(a){return a},toWireType:function(a,u){if(typeof u!="number"&&typeof u!="boolean")throw new TypeError('Cannot convert "'+dr(u)+'" to '+this.name);return u},argPackAdvance:8,readValueFromPointer:Me(e,t),destructorFunction:null})}function De(r,e){if(!(r instanceof Function))throw new TypeError("new_ called with constructor type "+typeof r+" which is not a function");var n=Wr(r.name||"unknownFunctionName",function(){});n.prototype=r.prototype;var t=new n,a=r.apply(t,e);return a instanceof Object?a:t}function Ie(r,e,n,t,a){var u=e.length;u<2&&A("argTypes array size mismatch! Must at least get return value and 'this' types!"),e[1];for(var f=!1,o=1;o<e.length;++o)if(e[o]!==null&&e[o].destructorFunction===void 0){f=!0;break}for(var s=e[0].name!=="void",d="",g="",o=0;o<u-2;++o)d+=(o!==0?", ":"")+"arg"+o,g+=(o!==0?", ":"")+"arg"+o+"Wired";var h="return function "+Sr(r)+"("+d+`) {
|
|
6
|
+
if (arguments.length !== `+(u-2)+`) {
|
|
7
|
+
throwBindingError('function `+r+" called with ' + arguments.length + ' arguments, expected "+(u-2)+` args!');
|
|
8
|
+
}
|
|
9
|
+
`;f&&(h+=`var destructors = [];
|
|
10
|
+
`);for(var D=f?"destructors":"null",C=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],S=[A,t,a,Ur,e[0],e[1]],o=0;o<u-2;++o)h+="var arg"+o+"Wired = argType"+o+".toWireType("+D+", arg"+o+"); // "+e[o+2].name+`
|
|
11
|
+
`,C.push("argType"+o),S.push(e[o+2]);if(h+=(s?"var rv = ":"")+"invoker(fn"+(g.length>0?", ":"")+g+`);
|
|
12
|
+
`,f)h+=`runDestructors(destructors);
|
|
13
|
+
`;else for(var o=2;o<e.length;++o){var I=o===1?"thisWired":"arg"+(o-2)+"Wired";e[o].destructorFunction!==null&&(h+=I+"_dtor("+I+"); // "+e[o].name+`
|
|
14
|
+
`,C.push(I+"_dtor"),S.push(e[o].destructorFunction))}s&&(h+=`var ret = retType.fromWireType(rv);
|
|
15
|
+
return ret;
|
|
16
|
+
`),h+=`}
|
|
17
|
+
`,C.push(h);var H=De(Function,C).apply(null,S);return H}function Oe(r,e,n){if(r[e].overloadTable===void 0){var t=r[e];r[e]=function(){return r[e].overloadTable.hasOwnProperty(arguments.length)||A("Function '"+n+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+r[e].overloadTable+")!"),r[e].overloadTable[arguments.length].apply(this,arguments)},r[e].overloadTable=[],r[e].overloadTable[t.argCount]=t}}function je(r,e,n){i.hasOwnProperty(r)?((n===void 0||i[r].overloadTable!==void 0&&i[r].overloadTable[n]!==void 0)&&A("Cannot register public name '"+r+"' twice"),Oe(i,r,r),i.hasOwnProperty(n)&&A("Cannot register multiple overloads of a function with the same number of arguments ("+n+")!"),i[r].overloadTable[n]=e):(i[r]=e,n!==void 0&&(i[r].numArguments=n))}function He(r,e){for(var n=[],t=0;t<r;t++)n.push(w[(e>>2)+t]);return n}function qe(r,e,n){i.hasOwnProperty(r)||kr("Replacing nonexistant public symbol"),i[r].overloadTable!==void 0&&n!==void 0?i[r].overloadTable[n]=e:(i[r]=e,i[r].argCount=n)}function Le(r,e,n){var t=i["dynCall_"+r];return n&&n.length?t.apply(null,[e].concat(n)):t.call(null,e)}function Ve(r,e,n){return r.includes("j")?Le(r,e,n):x.get(e).apply(null,n)}function xe(r,e){var n=[];return function(){n.length=arguments.length;for(var t=0;t<arguments.length;t++)n[t]=arguments[t];return Ve(r,e,n)}}function B(r,e){r=b(r);function n(){return r.includes("j")?xe(r,e):x.get(e)}var t=n();return typeof t!="function"&&A("unknown function pointer with signature "+r+": "+e),t}var Hr=void 0;function qr(r){var e=zr(r),n=b(e);return U(e),n}function ze(r,e){var n=[],t={};function a(u){if(!t[u]&&!k[u]){if($[u]){$[u].forEach(a);return}n.push(u),t[u]=!0}}throw e.forEach(a),new Hr(r+": "+n.map(qr).join([", "]))}function Be(r,e,n,t,a,u){var f=He(e,n);r=b(r),a=B(t,a),je(r,function(){ze("Cannot call "+r+" due to unbound types",f)},e-1),Dr([],f,function(o){var s=[o[0],null].concat(o.slice(1));return qe(r,Ie(r,s,null,a,u),e-1),[]})}function Ne(r,e,n){switch(e){case 0:return n?function(a){return L[a]}:function(a){return y[a]};case 1:return n?function(a){return V[a>>1]}:function(a){return G[a>>1]};case 2:return n?function(a){return w[a>>2]}:function(a){return F[a>>2]};default:throw new TypeError("Unknown integer type: "+r)}}function Je(r,e,n,t,a){e=b(e),a===-1&&(a=4294967295);var u=sr(n),f=function(d){return d};if(t===0){var o=32-8*n;f=function(d){return d<<o>>>o}}var s=e.includes("unsigned");R(r,{name:e,fromWireType:f,toWireType:function(d,g){if(typeof g!="number"&&typeof g!="boolean")throw new TypeError('Cannot convert "'+dr(g)+'" to '+this.name);if(g<t||g>a)throw new TypeError('Passing a number "'+dr(g)+'" from JS side to C/C++ side to an argument of type "'+e+'", which is outside the valid range ['+t+", "+a+"]!");return s?g>>>0:g|0},argPackAdvance:8,readValueFromPointer:Ne(e,u,t!==0),destructorFunction:null})}function Ge(r,e,n){var t=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],a=t[e];function u(f){f=f>>2;var o=F,s=o[f],d=o[f+1];return new a(ur,d,s)}n=b(n),R(r,{name:n,fromWireType:u,argPackAdvance:8,readValueFromPointer:u},{ignoreDuplicateRegistrations:!0})}function Qe(r,e){e=b(e);var n=e==="std::string";R(r,{name:e,fromWireType:function(t){var a=F[t>>2],u;if(n)for(var f=t+4,o=0;o<=a;++o){var s=t+4+o;if(o==a||y[s]==0){var d=s-f,g=wr(f,d);u===void 0?u=g:(u+="\0",u+=g),f=s+1}}else{for(var h=new Array(a),o=0;o<a;++o)h[o]=String.fromCharCode(y[t+4+o]);u=h.join("")}return U(t),u},toWireType:function(t,a){a instanceof ArrayBuffer&&(a=new Uint8Array(a));var u,f=typeof a=="string";f||a instanceof Uint8Array||a instanceof Uint8ClampedArray||a instanceof Int8Array||A("Cannot pass non-string to std::string"),n&&f?u=function(){return re(a)}:u=function(){return a.length};var o=u(),s=gr(4+o+1);if(F[s>>2]=o,n&&f)Zr(a,s+4,o+1);else if(f)for(var d=0;d<o;++d){var g=a.charCodeAt(d);g>255&&(U(s),A("String has UTF-16 code units that do not fit in 8 bits")),y[s+4+d]=g}else for(var d=0;d<o;++d)y[s+4+d]=a[d];return t!==null&&t.push(U,s),s},argPackAdvance:8,readValueFromPointer:Y,destructorFunction:function(t){U(t)}})}function Xe(r,e,n){n=b(n);var t,a,u,f,o;e===2?(t=ne,a=te,f=ie,u=function(){return G},o=1):e===4&&(t=oe,a=ae,f=ue,u=function(){return F},o=2),R(r,{name:n,fromWireType:function(s){for(var d=F[s>>2],g=u(),h,D=s+4,C=0;C<=d;++C){var S=s+4+C*e;if(C==d||g[S>>o]==0){var I=S-D,H=t(D,I);h===void 0?h=H:(h+="\0",h+=H),D=S+e}}return U(s),h},toWireType:function(s,d){typeof d!="string"&&A("Cannot pass non-string to C++ string type "+n);var g=f(d),h=gr(4+g+e);return F[h>>2]=g>>o,a(d,h+4,g+e),s!==null&&s.push(U,h),h},argPackAdvance:8,readValueFromPointer:Y,destructorFunction:function(s){U(s)}})}function Ye(r,e,n,t,a,u){X[r]={name:b(e),rawConstructor:B(n,t),rawDestructor:B(a,u),fields:[]}}function $e(r,e,n,t,a,u,f,o,s,d){X[r].fields.push({fieldName:b(e),getterReturnType:n,getter:B(t,a),getterContext:u,setterArgumentType:f,setter:B(o,s),setterContext:d})}function Ke(r,e){e=b(e),R(r,{isVoid:!0,name:e,argPackAdvance:0,fromWireType:function(){},toWireType:function(n,t){}})}var Ze={};function rn(r){var e=Ze[r];return e===void 0?b(r):e}function Lr(){return typeof globalThis=="object"?globalThis:function(){return Function}()("return this")()}function en(r){return r===0?K(Lr()):(r=rn(r),K(Lr()[r]))}function nn(r){r>4&&(T[r].refcount+=1)}function tn(r,e){var n=k[r];return n===void 0&&A(e+" has unknown type "+qr(r)),n}function on(r){for(var e="",n=0;n<r;++n)e+=(n!==0?", ":"")+"arg"+n;for(var t="return function emval_allocator_"+r+`(constructor, argTypes, args) {
|
|
18
|
+
`,n=0;n<r;++n)t+="var argType"+n+" = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + "+n+'], "parameter '+n+`");
|
|
19
|
+
var arg`+n+" = argType"+n+`.readValueFromPointer(args);
|
|
20
|
+
args += argType`+n+`['argPackAdvance'];
|
|
21
|
+
`;return t+="var obj = new constructor("+e+`);
|
|
22
|
+
return __emval_register(obj);
|
|
23
|
+
}
|
|
24
|
+
`,new Function("requireRegisteredType","Module","__emval_register",t)(tn,i,K)}var Vr={};function an(r){return r||A("Cannot use deleted val. handle = "+r),T[r].value}function un(r,e,n,t){r=an(r);var a=Vr[e];return a||(a=on(e),Vr[e]=a),a(r,n,t)}function fn(){Q()}function cn(r,e,n){y.copyWithin(r,e,e+n)}function sn(r){try{return J.grow(r-ur.byteLength+65535>>>16),Tr(J.buffer),1}catch{}}function ln(r){var e=y.length;r=r>>>0;var n=2147483648;if(r>n)return!1;for(var t=1;t<=4;t*=2){var a=e*(1+.2/t);a=Math.min(a,r+100663296);var u=Math.min(n,ce(Math.max(r,a),65536)),f=sn(u);if(f)return!0}return!1}var xr={};function dn(){return or||"./this.program"}function N(){if(!N.strings){var r=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:r,_:dn()};for(var n in xr)e[n]=xr[n];var t=[];for(var n in e)t.push(n+"="+e[n]);N.strings=t}return N.strings}var Z={mappings:{},buffers:[null,[],[]],printChar:function(r,e){var n=Z.buffers[r];e===0||e===10?((r===1?Yr:O)($r(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){Z.varargs+=4;var r=w[Z.varargs-4>>2];return r},getStr:function(r){var e=wr(r);return e},get64:function(r,e){return r}};function gn(r,e){var n=0;return N().forEach(function(t,a){var u=e+n;w[r+a*4>>2]=u,fe(t,u),n+=t.length+1}),0}function vn(r,e){var n=N();w[r>>2]=n.length;var t=0;return n.forEach(function(a){t+=a.length+1}),w[e>>2]=t,0}function hn(r){An(r)}function pn(r){return 0}function _n(r,e,n,t,a){}function yn(r,e,n,t){for(var a=0,u=0;u<n;u++){for(var f=w[e+u*8>>2],o=w[e+(u*8+4)>>2],s=0;s<o;s++)Z.printChar(r,y[f+s]);a+=o}return w[t>>2]=a,0}function mn(r){}Mr=i.InternalError=cr(Error,"InternalError"),Pe(),Or=i.BindingError=cr(Error,"BindingError"),Se(),Hr=i.UnboundTypeError=cr(Error,"UnboundTypeError");var wn={B:be,l:Ee,p:Ce,y:Fe,x:We,i:ke,f:Be,c:Je,b:Ge,j:Qe,e:Xe,m:Ye,a:$e,z:Ke,g:jr,u:en,k:nn,n:un,h:fn,r:cn,d:ln,s:gn,t:vn,A:hn,w:pn,o:_n,v:yn,q:mn};we(),i.___wasm_call_ctors=function(){return(i.___wasm_call_ctors=i.asm.D).apply(null,arguments)};var gr=i._malloc=function(){return(gr=i._malloc=i.asm.E).apply(null,arguments)},U=i._free=function(){return(U=i._free=i.asm.F).apply(null,arguments)},zr=i.___getTypeName=function(){return(zr=i.___getTypeName=i.asm.G).apply(null,arguments)};i.___embind_register_native_and_builtin_types=function(){return(i.___embind_register_native_and_builtin_types=i.asm.H).apply(null,arguments)},i.dynCall_jiji=function(){return(i.dynCall_jiji=i.asm.J).apply(null,arguments)};var rr;function bn(r){this.name="ExitStatus",this.message="Program terminated with exit("+r+")",this.status=r}z=function r(){rr||vr(),rr||(z=r)};function vr(r){if(M>0||(se(),M>0))return;function e(){rr||(rr=!0,i.calledRun=!0,!yr&&(le(),v(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),de()))}i.setStatus?(i.setStatus("Running..."),setTimeout(function(){setTimeout(function(){i.setStatus("")},1),e()},1)):e()}i.run=vr;function An(r,e){W(r,new bn(r))}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return vr(),i.ready}}();const er=self,nr=new Map;async function Gr(c,l){return nr.has(c)||nr.set(c,await l()),nr.get(c)}async function tr(c,l,i){const v=new OffscreenCanvas(c.width,c.height);return v.getContext("2d").putImageData(c,0,0),v.convertToBlob({type:l,quality:i})}async function ir(c){return new Uint8Array(await c.arrayBuffer())}function pr(c){return createImageBitmap(c).then(l=>{const v=new OffscreenCanvas(l.width,l.height).getContext("2d");return v.drawImage(l,0,0),v.getImageData(0,0,l.width,l.height)})}const _r={async avifDecode(c){return pr(c)},async jxlDecode(c){throw new Error("JXL decode 需要 WASM 解码器,尚未实现")},async qoiDecode(c){throw new Error("QOI decode 需要 WASM 解码器,尚未实现")},async webpDecode(c){return pr(c)},async wp2Decode(c){throw new Error("WebP2 decode 需要 WASM 解码器,尚未实现")},async avifEncode(c,l){const i=await tr(c,"image/avif");return ir(i)},async jxlEncode(c,l){throw new Error("JXL encode 需要 WASM 编码器,尚未实现")},async mozjpegEncode(c,l){return(await Gr("mozjpeg_enc",async()=>Nr(Jr,{locateFile:v=>v==="mozjpeg_enc.wasm"?"../codecs/mozjpeg/enc/mozjpeg_enc.wasm":v}))).encode(c.data,c.width,c.height,{quality:l.quality??75,baseline:l.baseline??!1,arithmetic:l.arithmetic??!1,progressive:l.progressive??!0,optimize_coding:l.optimize_coding??!0,smoothing:l.smoothing??0,color_space:l.color_space??3,quant_table:l.quant_table??3,trellis_multipass:l.trellis_multipass??!1,trellis_opt_zero:l.trellis_opt_zero??!1,trellis_opt_table:l.trellis_opt_table??!1,trellis_loops:l.trellis_loops??1,auto_subsample:l.auto_subsample??!0,chroma_subsample:l.chroma_subsample??2,separate_chroma_quality:l.separate_chroma_quality??!1,chroma_quality:l.chroma_quality??75})},async oxipngEncode(c,l){const i=await tr(c,"image/png");return ir(i)},async qoiEncode(c,l){throw new Error("QOI encode 需要 WASM 编码器,尚未实现")},async webpEncode(c,l){const i=l.quality!=null?l.quality/100:.75,v=await tr(c,"image/webp",i);return ir(v)},async wp2Encode(c,l){throw new Error("WebP2 encode 需要 WASM 编码器,尚未实现")},async rotate(c,l){const i=(l.rotate||0)%360*(Math.PI/180);if(i===0)return c;const v=Math.abs(Math.sin(i)),_=Math.abs(Math.cos(i)),p=Math.round(c.width*_+c.height*v),m=Math.round(c.width*v+c.height*_),W=new OffscreenCanvas(p,m).getContext("2d");return W.translate(p/2,m/2),W.rotate(i),W.drawImage(await createImageBitmap(new ImageData(c.data,c.width,c.height)),-c.width/2,-c.height/2),W.getImageData(0,0,p,m)},async quantize(c,l){const i=l.numColors||256,v=Math.floor(256/Math.max(1,Math.min(i,256))),_=new Uint8ClampedArray(c.data);for(let p=0;p<_.length;p+=4)_[p]=Math.floor(_[p]/v)*v,_[p+1]=Math.floor(_[p+1]/v)*v,_[p+2]=Math.floor(_[p+2]/v)*v;return new ImageData(_,c.width,c.height)},async resize(c,l){const i=l.width||c.width,v=l.height||c.height;if(i===c.width&&v===c.height)return c;const p=new OffscreenCanvas(i,v).getContext("2d");p.imageSmoothingEnabled=!0,p.imageSmoothingQuality="high";const m=await createImageBitmap(new ImageData(c.data,c.width,c.height));return p.drawImage(m,0,0,i,v),p.getImageData(0,0,i,v)}};er.addEventListener("message",async c=>{const{id:l,method:i,args:v}=c.data;console.log("[Worker] received message:",i,v);try{const _=_r[i];if(!_)throw new Error(`Unknown method: ${i}`);const p=await _.apply(_r,v);console.log("[Worker] completed:",i,p),er.postMessage({id:l,result:p,error:null})}catch(_){console.error("[Worker] error:",i,_),er.postMessage({id:l,result:null,error:_ instanceof Error?_.message:String(_)})}})})();
|