2013-07-02 73 views
1

我可以使用Javascript将图像转换为画布,反之亦然?将图像转换为画布,并且在Javascript中画布再次转换为图像是不可能的?

我想将图像转换为画布,在画布上绘制某些内容,然后再将画布转换为图像。

var canvas = document.getElementById("CANVAS"), 
    img = new Image(); 

    img.src = canvas.toDataURL(); //=> Error is occurred at this point. 
    img.onload = function(){ 
     // ... 
    }; 

当我将画布转换为图像时,它失败。

SecurityError: The operation is insecure.

这张照片是从服务器提供的。

方式错了吗?这是不可能的吗?

+1

是的,它是可能的,但是你必须了解和CORS同源策略。 –

+1

谢谢。我尝试启用CORS Image和Access-Control-Allow-Origin。 –

回答

3

问题已解决。谢谢你的失败。

的.htaccess

Header set Access-Control-Allow-Origin http://mysite-domain #=> The point of solution 

的JavaScript

将图像转换为帆布

this.imageToCanvas = function() 
{ 
    var self = this, 
     img = new Image(); 

     img.src   = document.getElementById("IMAGE").src; 
     img.crossOrigin = "anonymous"; //=> The point of solution 
     img.onload  = function(){ 
      var canvas = document.getElementById("CANVAS"); 

      if (! canvas || ! canvas.getContext) { return false; } 

      var ctx = canvas.getContext('2d'); 
       ctx.drawImage(img, 0, 0, img.width, img.height); 

      self.draw(); 
     }; 
}; 

画东西在画布上

this.draw = function() 
{ 
    var self = this, 
     text = "stackoverflow", 
     img = new Image(); 

     img.crossOrigin = "anonymous"; //=> The point of solution 
     img.src   = document.getElementById("SECOND-IMAGE").src; 
     img.onload  = function(){ 
      var canvas = document.getElementById("CANVAS"); 

      if (! canvas || ! canvas.getContext) { return false; } 

      var ctx = canvas.getContext('2d'); 
       ctx.drawImage(img, 10, 10, img.width, img.height); 

       ctx.save(); 
       ctx.font  = "italic bold 32px 'Times New Roman'";; 
       ctx.fillStyle = "#0067ef"; 
       ctx.fillText(text, 50, 50); 
       ctx.restore(); 

       self.canvasToImage(canvas); 
     }; 
}; 

转换画布回的图像再次

this.canvasToImage = function(_canvas) 
{ 
    var img  = new Image(); 
     img.id = "IMAGE"; 
     img.src = _canvas.toDataURL(); //=> It succeeds this time. 

    $("#" + _canvas.id).replaceWith(img); //=> with jQuery 
}; 
+0

请将您的答案标记为已接受。即使它是重复的,它也会更干净。为了构建收集元素的干净答案而努力+1,这可能有助于其他用户。 –

+0

现在好像不能接受。如果时间流逝,我会接受。谢谢。 –