【问题标题】:Javascript upload image onto canvasJavascript将图像上传到画布上
【发布时间】:2020-05-19 15:06:58
【问题描述】:

我想上传图像文件并在画布上显示。 所以我写了如下代码

此处为 HTML 代码

<div class="img_upload">
    <input type="file" id="real-input" class="input-btn" accept="img/*" required multiple>
    <button class="browse-btn">Image Upload</botton>
</div>

<canvas id="jsCanvas" class="canvas" width="600" height="400"></canvas>

这里是javascript代码

const canvas = document.querySelector('#jsCanvas');
const ctx = canvas.getContext('2d');
const browseBtn = document.querySelector('.browse-btn');
const realInput = document.querySelector('#real-input');

function readInputFile(e) {
    var file = e.target.files;

    const img = new Image();

    var reader = new FileReader();
    reader.onload = function (e) {
        img.src = e.target.result;
    };
    reader.readAsDataURL(file[0]);

    ctx.drawImage(img, 0, 0);
}

// button act like input tag
browseBtn.addEventListener('click', () => {
    realInput.click();
});


realInput.addEventListener('change', readInputFile);

但是ctx.drawImage(img, 0, 0); 不起作用。

我检查了值console.log(img)的img,那么它的值是&lt;img src="incoding very long base 64 data"&gt; 在我写了body.appendChild(img); 之后我可以看到图像。

如何在画布上激活 drawImage?这里有什么问题?

【问题讨论】:

    标签: javascript html css api canvas


    【解决方案1】:

    你好,我改变你的代码试试这个:

    const canvas = document.querySelector('#jsCanvas');
    const ctx = canvas.getContext('2d');
    const realInput = document.querySelector('#real-input');
    realInput.addEventListener('change', handleImage, false);
    
    
    function handleImage(e){
        var reader = new FileReader();
        reader.onload = function(event){
            var img = new Image();
            img.onload = function(){
                canvas.width = img.width;
                canvas.height = img.height;
                ctx.drawImage(img,0,0);
            }
            img.src = event.target.result;
        }
        reader.readAsDataURL(e.target.files[0]);     
    }
    <div class="img_upload">
       <input type="file" id="real-input" class="input-btn" accept="img/*" required multiple>
     
    </div>
    
    <canvas id="jsCanvas" class="canvas" width="600" height="400"></canvas>

    【讨论】:

    • 哇!我错过了img.onload ??这是完美的工作!谢谢
    猜你喜欢
    • 2014-06-09
    • 2018-06-12
    • 2015-04-29
    • 1970-01-01
    • 2014-04-10
    • 2013-01-23
    • 1970-01-01
    • 2014-09-01
    • 2012-06-10
    相关资源
    最近更新 更多