2013-10-22 78 views
0

我想要drawImage放在画布标签上,然后再次保存。我使用jQuery的deferred.done()jQuery推迟不工作铬和Safari浏览器?

这里是我使用的代码:

function save_submit() { 
    LoadDraw().done(function(){ 
     var canvas = document.getElementById('touchpaint'); 
     var ctx = canvas.getContext('2d'); 
     var image = canvas.toDataURL(); 
    }); 
var LoadDraw = function() { 
    var r = $.Deferred(); 
    var canvas = document.getElementById('touchpaint'); 
    var ctx = canvas.getContext('2d'); 
    var imageLoader = 'http://img262.imageshack.us/img262/3453/gokum.jpg'; 
    var img = new Image(); 
    $(img).load(function(){ 
     ctx.globalCompositeOperation = "destination-over"; 
     ctx.drawImage(img,0,0); 
    }); 
    img.crossOrigin = ''; 
    img.src = imageLoader;  
    r.resolve(); 
    return r; 
    } 

它工作正常的Firefox。但在Chrome和Safari上不起作用。我正在寻求帮助。谢谢。

+2

'但在Chrome和Safari'不行 - 你能更具体?什么不起作用?你得到什么错误? –

+0

我画在画布上后。我想保存canvas + imageBackground。在Firefox上,我可以保存画布+背景。但在Chrome或Safari上不保存背景。它不报告任何错误。这只是保存画布。 – JohnEvans

回答

0

那么,你没有正确使用Deferred。 Deferred对象的想法是在某种回调函数中解析它,而不是在创建它之后“直接”解析它。

在你的情况,你可能应该解决在$(IMG).load回调函数的延迟(R):

var LoadDraw = function() { 
    var r = $.Deferred(); 
    var canvas = document.getElementById('touchpaint'); 
    var ctx = canvas.getContext('2d'); 
    var imageLoader = 'http://img262.imageshack.us/img262/3453/gokum.jpg'; 
    var img = new Image(); 
    $(img).load(function(){ 
     ctx.globalCompositeOperation = "destination-over"; 
     ctx.drawImage(img,0,0); 
     r.resolve(); 
    }); 
    img.crossOrigin = ''; 
    img.src = imageLoader;  

    return r; 
    } 
+0

第一个,非常感谢。但是,在函数LoadDraw()完成之后。我无法获得canvas.toURLdata(); – JohnEvans

+0

为什么不呢?当图像完全加载时,你应该可以使用toURLdata函数,对吗? –

+0

对。我想是这样。我尝试加载图像到画布。但函数LoadDraw没有运行完成。没有完成。函数DrawLoad出现错误。 – JohnEvans

相关问题