【问题标题】:Resizing a image with Javascript without rendering a canvas on the DOM使用 Javascript 调整图像大小而不在 DOM 上渲染画布
【发布时间】:2017-10-04 04:22:00
【问题描述】:

我已经在许多其他线程中看到了这个有趣的线程:Resize a Base-64 image in JavaScript without using canvas

但是,当我使用

创建屏幕外画布时
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) 作为参数。 任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: javascript typescript image-resizing


    【解决方案1】:

    加载完成后,您会得到一个 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);
          }
        });
    &lt;input id="file" type="file"&gt;

    【讨论】:

    • 非常感谢!
    • 很高兴为您提供帮助
    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2017-04-22
    • 2013-10-16
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多