Skip to content

Commit 9373ed7

Browse files
authored
Merge pull request #16 from Lenni009/dev
optimise canvas rendering
2 parents 1eb552b + 12b033e commit 9373ed7

File tree

7 files changed

+16
-28
lines changed

7 files changed

+16
-28
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ npm i simple-image-compressor
1515
### CDN
1616

1717
```html
18-
<script src="https://cdn.jsdelivr.net/npm/simple-image-compressor@1.7.0/dist/simple-image-compressor-min.js"></script>
18+
<script src="https://cdn.jsdelivr.net/npm/simple-image-compressor@1.8.0/dist/simple-image-compressor-min.js"></script>
1919
```
2020

2121
## Main function
@@ -59,7 +59,7 @@ const compressedImage = await compressFile(file);
5959
```html
6060
<html lang="en">
6161
<head>
62-
<script src="https://cdn.jsdelivr.net/npm/simple-image-compressor@1.7.0/dist/simple-image-compressor-min.js"></script>
62+
<script src="https://cdn.jsdelivr.net/npm/simple-image-compressor@1.8.0/dist/simple-image-compressor-min.js"></script>
6363
<script>
6464
window.onload = () => {
6565
const fileInput = document.getElementById('file-input');

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "simple-image-compressor",
3-
"version": "1.7.0",
3+
"version": "1.8.0",
44
"type": "module",
55
"description": "Simple frontend JS library to compress images",
66
"main": "./dist/simple-image-compressor.js",

src/main.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { imageTypes } from './imageTypes';
2-
import { objectURLtoImage } from './objectURLtoImage';
32
import type { CompressionConfig, WorkerMessage, WorkerMessageConfig } from './types';
43
import { handleWorkerProcess } from './workerHandler';
54

@@ -8,18 +7,13 @@ export async function compressImage(file: File, config: CompressionConfig = {}):
87
config.type ??= imageTypes.JPEG;
98
config.quality ??= 0.92;
109

11-
// get width & height of file for canvas dimensions in worker
12-
const objectUrl = URL.createObjectURL(file);
13-
const { width, height } = await objectURLtoImage(objectUrl);
14-
URL.revokeObjectURL(objectUrl);
15-
1610
const workerConfig: WorkerMessageConfig = {
1711
originalType: file.type,
1812
...config,
1913
};
2014

2115
// construct object to send to worker
22-
const workerMessage: WorkerMessage = { file, img: { width, height }, config: workerConfig };
16+
const workerMessage: WorkerMessage = { file, config: workerConfig };
2317

2418
// let the worker process the file
2519
const compressedBlob = await handleWorkerProcess(workerMessage);

src/objectURLtoImage.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ export interface WorkerMessageConfig extends CompressionConfig {
1414
}
1515

1616
export interface WorkerMessage {
17-
img: { width: number; height: number };
1817
file: File;
1918
config: WorkerMessageConfig;
2019
}

src/worker.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,19 @@ onmessage = async ({ data }: MessageEvent<WorkerMessage>) => {
2020
}
2121
};
2222

23-
async function compressFileWorker({ img: { width, height }, file, config }: WorkerMessage) {
24-
// Create an OffscreenCanvas
25-
const offscreenCanvas = new OffscreenCanvas(width, height);
26-
const ctx = offscreenCanvas.getContext('2d');
27-
23+
async function compressFileWorker({ file, config }: WorkerMessage) {
2824
// Create an ImageBitmap from the file
2925
const imageBitmap = await createImageBitmap(file);
3026

31-
// Draw the ImageBitmap onto the OffscreenCanvas
32-
ctx?.drawImage(imageBitmap, 0, 0);
27+
// Get width & height of file for canvas dimensions
28+
const { width, height } = imageBitmap;
29+
30+
// Create an OffscreenCanvas
31+
const offscreenCanvas = new OffscreenCanvas(width, height);
32+
const ctx = offscreenCanvas.getContext('bitmaprenderer');
33+
34+
// Transfer the ImageBitmap to the OffscreenCanvas
35+
ctx?.transferFromImageBitmap(imageBitmap);
3336

3437
const compressedBlob = await offscreenCanvas.convertToBlob(config);
3538

0 commit comments

Comments
 (0)