I've seen this interesting thread among many others: Resize a Base-64 image in JavaScript without using canvas
However when i create an off screen canvas using
const canvas = document.createElement('canvas');
the result image is transparent and the size does not even match the parameters. If i draw on a canvas from the DOM everything works fine
const canvas = document.getElementById('canvas');
Here is my resize function that keeps the input image ratio :
resizeImage(file) {
const canvas = document.createElement('canvas');
// const canvas = document.getElementById('canvas');
const context = (<HTMLCanvasElement>canvas).getContext('2d');
// set maximum width and height of output image
const maxW = 400;
const maxH = 400;
const img = new Image;
img.onload = function () {
const iw = img.width;
const ih = img.height;
const scale = Math.min((maxW / iw), (maxH / ih));
const iwScaled = iw * scale;
const ihScaled = ih * scale;
console.log(iwScaled + ' ' + ihScaled);
(<HTMLCanvasElement>canvas).width = iwScaled;
(<HTMLCanvasElement>canvas).height = ihScaled;
context.drawImage(img, 0, 0, iwScaled, ihScaled);
}
img.src = URL.createObjectURL(file);
// retrieve output img in base64 format
console.log((<HTMLCanvasElement>canvas).toDataURL());
}
It takes a file (File) from a HTML input as parameter. Any help would be appreciated, thank you.
you get a Base-64 image when load is complete.