39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
(async () => {
|
|
// Load element references
|
|
const fileInput = document.getElementById("source-image");
|
|
const btn = document.getElementById("go-btn");
|
|
|
|
// Setup Wasm stuff
|
|
const go = new Go();
|
|
vm = await WebAssembly.instantiateStreaming(
|
|
fetch("/main.wasm"),
|
|
go.importObject
|
|
);
|
|
go.run(vm.instance);
|
|
|
|
// Setup event listener
|
|
btn.addEventListener("click", async () => {
|
|
// Clear image
|
|
outputElement = document.getElementById("output");
|
|
outputElement.src = "";
|
|
|
|
// Check if a file was selected
|
|
if (fileInput.files.length === 0) {
|
|
alert("No file selected");
|
|
return;
|
|
}
|
|
reader = new FileReader();
|
|
reader.readAsArrayBuffer(fileInput.files[0]);
|
|
reader.Read;
|
|
reader.onloadend = async (evt) => {
|
|
if (evt.target.readyState === FileReader.DONE) {
|
|
const array = new Uint8Array(evt.target.result);
|
|
// Wasm magic happens here
|
|
ditheredImageData = await DitherNord(array);
|
|
document.getElementById("output").src =
|
|
"data:image/png;base64," + ditheredImageData;
|
|
}
|
|
};
|
|
});
|
|
})();
|