mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-12 08:47:31 +00:00
49 lines
1.9 KiB
HTML
49 lines
1.9 KiB
HTML
<!doctype html>
|
|
<script src='mozjpeg_enc.js'></script>
|
|
<script>
|
|
const Module = mozjpeg_enc();
|
|
|
|
async function loadImage(src) {
|
|
// Load image
|
|
const img = document.createElement('img');
|
|
img.src = src;
|
|
await new Promise(resolve => img.onload = resolve);
|
|
// Make canvas same size as image
|
|
const canvas = document.createElement('canvas');
|
|
[canvas.width, canvas.height] = [img.width, img.height];
|
|
// Draw image onto canvas
|
|
const ctx = canvas.getContext('2d');
|
|
ctx.drawImage(img, 0, 0);
|
|
return ctx.getImageData(0, 0, img.width, img.height);
|
|
}
|
|
|
|
Module.onRuntimeInitialized = async _ => {
|
|
const api = {
|
|
version: Module.cwrap('version', 'number', []),
|
|
create_buffer: Module.cwrap('create_buffer', 'number', ['number', 'number']),
|
|
destroy_buffer: Module.cwrap('destroy_buffer', '', ['number']),
|
|
encode: Module.cwrap('encode', '', ['number', 'number', 'number', 'number']),
|
|
free_result: Module.cwrap('free_result', '', ['number']),
|
|
get_result_pointer: Module.cwrap('get_result_pointer', 'number', []),
|
|
get_result_size: Module.cwrap('get_result_size', 'number', []),
|
|
};
|
|
console.log('Version:', api.version().toString(16));
|
|
const image = await loadImage('../example.png');
|
|
const p = api.create_buffer(image.width, image.height);
|
|
Module.HEAP8.set(image.data, p);
|
|
api.encode(p, image.width, image.height, 2);
|
|
const resultPointer = api.get_result_pointer();
|
|
const resultSize = api.get_result_size();
|
|
const resultView = new Uint8Array(Module.HEAP8.buffer, resultPointer, resultSize);
|
|
const result = new Uint8Array(resultView);
|
|
api.free_result(resultPointer);
|
|
api.destroy_buffer(p);
|
|
|
|
const blob = new Blob([result], {type: 'image/jpeg'});
|
|
const blobURL = URL.createObjectURL(blob);
|
|
const img = document.createElement('img');
|
|
img.src = blobURL;
|
|
document.body.appendChild(img);
|
|
};
|
|
</script>
|