繁体   English   中英

使用Javascript调整图像大小而不在DOM上呈现画布

[英]Resizing a image with Javascript without rendering a canvas on the DOM

我在其他许多人中看到了这个有趣的线程: 在不使用画布的情况下在JavaScript中调整Base-64图像的大小

但是,当我使用创建一个屏幕外画布

const canvas = document.createElement('canvas');

结果图像是透明的,大小甚至不匹配参数。 如果我在DOM的画布上画一切都很好

const canvas = document.getElementById('canvas');

这是我的调整大小功能,保持输入图像比例:

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());
}

它从HTML输入中获取文件(File)作为参数。 任何帮助将不胜感激,谢谢。

加载完成后,您将获得Base-64图像。

 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"> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM