javascript - 在 Canvas 上,使用 png 绘制图像与使用笔画创建绘图之间的区别?

标签 javascript canvas png html5-canvas

为什么 Canvas 中的处理方式存在差异?例如,如果我在 Canvas 上放置一个 png 与在 Canvas 上画一条线。当我将该 Canvas 的内容复制到另一个 Canvas 时,只有该行被复制。

var thecanvas = document.getElementById('mycanvas');
var context = thecanvas.getContext('2d');

// put a png on the canvas
var img = new Image();
img.onload = function(){ context.drawImage(img,0,0); };
img.src = 'images/test.png';        

// draw a line on the canvas
context.moveTo(100, 150); context.lineTo(450, 50); context.stroke();

final_image = thecanvas.toDataURL("image/png");
copyimg = new Image();
copyimg.src = final_image;          
var newcanvas = document.getElementById('newCanvas');
var newcanvascontext = newcanvas.getContext('2d');

// why is only the line I drew copied over and not the png image???
newcanvascontext.drawImage(copyimg,0,0,397,397);

最佳答案

请注意图像加载事件。在加载图像之前复制 Canvas 。你必须这样做

var thecanvas = document.getElementById('mycanvas');
var context = thecanvas.getContext('2d');

// put a png on the canvas
var img = new Image();
img.onload = function(){ 

        context.drawImage(img,0,0); 

        var newcanvas = document.getElementById('newCanvas');
        var newcanvascontext = newcanvas.getContext('2d');
        newcanvascontext.drawImage(thecanvas,0 ,0);

};
img.src = 'http://www.mygreatiphone.com/wp-content/uploads/2011/11/google.png';        

// draw a line on the canvas
context.moveTo(100, 150); context.lineTo(450, 50); context.stroke();

查看演示:http://jsfiddle.net/diode/3NHXy/5/

关于javascript - 在 Canvas 上,使用 png 绘制图像与使用笔画创建绘图之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8600438/

相关文章:

javascript - 通过单击 AngularJS 中的按钮打开信息窗口

c# - 传递 javascript 参数并在 unity C# 文件中使用它们

javascript - Canvas 摆动动画 - Canvas 平移

安卓png优化

javascript - AJAX - 如果 JSON 发生更改,则重新加载页面

javascript - Safari <select> 上的默认空白选项

python - 将滚动条放在 Canvas 上的框架上

javascript - Canvas - 旋转文本动画

image - 为什么浏览器显示的图形不同以及如何更改?

c++ - .png 图像信息