画布不绘制图像

时间:2013-09-27 21:59:53

标签: javascript canvas drawimage

我只想弄清楚如何在画布上绘制图像。我按照W3学校的教程,但当我自己尝试它时似乎没有工作。我将下面的代码复制并粘贴到HTML文件中,图像永远不会加载到画布中。我将图片下载到同一目录中。我一直在问,并在网上看,但似乎没有人知道问题是什么。 我正在使用chrome的更新版本(版本29.0.1547.76 m)。

<!DOCTYPE html>
<html>
<body>

<p>Image to use:</p>
<img id="scream" src="img_the_scream.jpg" alt="The Scream" width="220" height="277">

<p>Canvas:</p>
<canvas id="myCanvas" width="250" height="300" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>

<script>

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");
this.ctx.drawImage(img,10,10);

</script>

</body>
</html>

3 个答案:

答案 0 :(得分:4)

在使用drawImage时,您的图像可能尚未完成加载:

<强> HTML

在img标签中添加onload处理程序:

<img id="scream" onload="draw()" src="...

然后处理它的功能:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");

function draw() {
    ctx.drawImage(img,10,10);
}

<强> Online demo here

请注意,您在文档中放置脚本的位置也很重要。

我建议您在JavaScript中设置src属性。这样可以更安全地处理onload(或使用img.addEventListener('load', ...订阅的事件)。

答案 1 :(得分:3)

您应该使用以下方法,首先加载图像然后显示:

image.onload = function() {
    pic.getContext('2d').drawImage('your image to display', 0,0);
}

答案 2 :(得分:0)

“如果您尝试在图像加载完成之前调用drawImage(),它将不会执行任何操作(或者,在较旧的浏览器中,甚至可能会引发异常)。因此,您必须确保使用load事件因此您不要在图像加载之前尝试此操作。”

示例:

var img = new Image();   // Create new img element
img.addEventListener('load', function() {
  // execute drawImage statements here
}, false);
img.src = 'myImage.png'; // Set source path

Source