typescript - Endre størrelse på et bilde med Javascript uten å vise et lerret (canvas) i DOM
Jeg har sett denne interessante tråden blant mange andre: Endre størrelse på et Base-64-bilde i JavaScript uten å bruke canvas
Men når jeg lager et off-screen lerret ved hjelp av
const canvas = document.createElement('canvas');
resultatbildet er gjennomsiktig og størrelsen samsvarer ikke engang med parameterne. Hvis jeg tegner på et lerret fra DOM, fungerer alt fint
const canvas = document.getElementById('canvas');
Her er min endringsfunksjon som beholder bildeforholdet på inngangsbilde:
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());
}
Den tar en fil (File) fra et HTML-inndata som parameter. All hjelp vil bli satt pris på, takk.
Svar #1
du får et Base-64-bilde når opplastingen er fullført.
function resizeImage(file) {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var maxW = 400;
var maxH = 400;
var img = document.createElement('img');
img.onload = function() {
var iw = img.width;
var ih = img.height;
var scale = Math.min((maxW / iw), (maxH / ih));
var iwScaled = iw * scale;
var ihScaled = ih * scale;
canvas.width = iwScaled;
canvas.height = ihScaled;
context.drawImage(img, 0, 0, iwScaled, ihScaled);
console.log(canvas.toDataURL());
document.body.innerHTML+=canvas.toDataURL();
}
img.src = URL.createObjectURL(file);
}
document.getElementById("file").addEventListener("change", function() {
file = file.files[0];
if (file) {
resizeImage(file);
}
});<input id="file" type="file">