| | |
| | | *********************************************************************/ |
| | | getWorker() { |
| | | if (!this.workerState.worker && typeof OffscreenCanvas !== 'undefined') { |
| | | this.workerState.worker = new Worker('worker.js'); |
| | | const workerCode = ` |
| | | self.onmessage = function(e) { |
| | | const { id, imageBitmap, width, height, type, quality } = e.data; |
| | | const canvas = new OffscreenCanvas(width, height); |
| | | const ctx = canvas.getContext('2d'); |
| | | ctx.drawImage(imageBitmap, 0, 0, width, height); |
| | | canvas.convertToBlob({ type, quality }).then(blob => { |
| | | self.postMessage({ id, blob }); |
| | | }); |
| | | }; |
| | | `; |
| | | const blob = new Blob([workerCode], { type: 'application/javascript' }); |
| | | const url = URL.createObjectURL(blob); |
| | | this.workerState.worker = new Worker(url); |
| | | URL.revokeObjectURL(url); // Safe to revoke immediately after Worker is created |
| | | this.workerState.worker.onmessage = (e) => this.handleWorkerMessage(e); |
| | | this.workerState.worker.onerror = (e) => this.handleWorkerError(e); |
| | | } |