Package Exports
- @saschazar/wasm-image-loader
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@saschazar/wasm-image-loader) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
📦 WebAssembly image loader/resizer
A dependency-free image loader/resizer written in WebAssembly
It works primarily as JPEG/PNG decoder, but might as well load 'raw' images from a Uint8Array to resize them to a desired width/height.
Installation
yarn add @saschazar/wasm-image-loaderor
npm install --save @saschazar/wasm-image-loaderUsage
It supports usage in the browser, in a Web Worker and of course Node.js.
// Node.js
import wasm_image_loader from '@saschazar/wasm-image-loader';
// Web Worker - see: https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/importScripts
importScripts('wasm_image_loader.js');
// -------- Browser/Web Worker/Node.js code below --------
// Load an image into a buffer using the Fetch API
const buffer = fetch('some JPEG or PNG').then((res) => res.buffer());
// Initialize the WebAssembly Module
const imageLoaderModule = new Promise((resolve) => {
const wasm = wasm_image_loader({
onRuntimeInitialized() {
// remove the 'then' property from wasm_image_loader,
// otherwise Promise runs into an endless loop.
const { then, ...other } = wasm;
// let Promise resolve with 'other' properties.
resolve(other);
},
});
});
async function loadImage() {
// store image buffer in Uint8Array
const array = new Uint8Array(await buffer());
const channels = 3; // 3 if RGB, 4 if Alpha channel is present (e.g. PNG)
// let imageLoaderModule Promise resolve
const { decode, dimensions, free, resize } = await imageLoaderModule;
const decoded = decode(array, array.length, channels);
const { channels, height, width } = dimensions();
const resized = resize(decoded, width, height, channels, 800, 600);
console.log(resized); // logs the uncompressed 800x600 RGB Uint8Array
// clean up memory, when loader is not needed anymore
free();
}Example
A working example is available on RunKit.
Credits
This package uses nothings/stb's source code (stb_image.h and stb_image_resize.h in particular).
License
Licensed under the MIT license.
Copyright ©️ 2020—2021 Sascha Zarhuber