2015-06-06 4 views
0

Любая идея, почему этот код не работает? : \HTML5 Canvas Base64 Ошибка

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

ответ

1

Вы дали imgObj1 время для загрузки с imgObj1.onload, но вы должны также дать img время загрузки путем добавления img.onload

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

enter image description here

BTW, ошибки легче определить, если вы отформатируете свой код. ;-)

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'; 
+0

Зачем ему загружать var img? Arent, который мы просто делаем toDataURL, который является внутренней функцией js? –

+0

'toDataURL' будет выполняться синхронно, но все изображения загружаются асинхронно. Поэтому в вашем коде 'document.body.appendChild (img);' будет выполняться до того, как 'img' будет полностью загружен и готов к использованию. – markE