【问题标题】:HTML5 Canvas Base64 Error [closed]HTML5 Canvas Base64 错误 [关闭]
【发布时间】:2015-06-06 17:20:37
【问题描述】:

知道为什么这段代码不起作用吗? :\

演示 -> https://jsfiddle.net/vgmFN/89/

 <script>
        var imgObj1 = new Image();
        var img = new Image();var a1=0;
        var can = document.getElementById('canvas1');
        var ctx = can.getContext('2d');
        imgObj1.onload = function() {
        ctx.drawImage(imgObj1,1,1);a1 = 1;
        }
        imgObj1.src = 'favicon.ico';
        if (a1 == 1) {
        console.log(can.toDataURL())
        img.src = can.toDataURL();
        document.body.appendChild(img);
        a1=0;
        }
        </script>

【问题讨论】:

    标签: javascript html canvas base64


    【解决方案1】:

    您使用imgObj1.onload 给了imgObj1 加载时间,但您还必须通过添加img.onloadimg 加载时间

    https://jsfiddle.net/m1erickson/tf0y1pL9/

    顺便说一句,如果您格式化代码,则更容易发现错误。 ;-)

    var can = document.getElementById('canvas1');
    var ctx = can.getContext('2d');
    
    // create and load the first image
    var imgObj1 = new Image();
    imgObj1.onload = function() {
    
        ctx.drawImage(imgObj1,1,1);
    
        // create and load the canvas as an image
        var img = new Image();
        img.onload=function(){
            document.body.appendChild(img);
        }
        img.src = can.toDataURL();
    
    }
    imgObj1.src = '/favicon.ico';
    

    【讨论】:

    • 为什么要加载var img?我们不是只做js内部函数的toDataURL吗?
    • toDataURL 将同步执行,但所有图像都是异步加载的。所以在你的代码中document.body.appendChild(img); 将在img 完全加载并准备好使用之前执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2011-08-31
    相关资源
    最近更新 更多