2

我正在尝试将图像放在画布上。我阅读了以下教程 https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Using_images 并尝试做与我的画布类似的事情<canvas id="canvas" width="400" height="400"></canvas> 并且我已经创建了函数

  function putImage(){
         var img = new Image();
         img.src = "./path.png"; 
         var ctx = document.getElementById('canvas').getContext('2d');
         ctx.drawImage(img,8,8);            
  }

但图像没有出现在画布上。我已经打印了图像路径并且它是正确的,所以我能够消除这个问题。有什么建议么?

谢谢

4

3 回答 3

8

根据教程,你应该像这样包裹你的ctx.drawImage()内部img.onload

function draw() {
  var ctx = document.getElementById('canvas').getContext('2d');
  var img = new Image();
  img.onload = function() {
    ctx.drawImage(img, 0, 0);
  };
  img.src = '/files/4531/backdrop.png';
}

我希望这有帮助。

于 2013-03-11T07:51:27.133 回答
1

添加到哈斯的答案:如果你不喜欢这种onload方法,你可以awaitPromise这样:

async function draw() {
  let ctx = document.getElementById("canvas").getContext('2d');
  let url = "https://example.com/image.png";
  let img = new Image();
  await new Promise(r => img.onload=r, img.src=url);
  ctx.drawImage(img, 0, 0);
}
于 2020-08-29T07:28:53.543 回答
1

如果你不喜欢使用Promise或者onload你也可以使用EventListener

function draw() {
  var ctx = document.getElementById('canvas').getContext('2d');
  var img = new Image();
  img.addEventListener('load', function(){
    ctx.drawImage(img, 0, 0);
  });
  img.src = '/files/4531/backdrop.png';
}
于 2020-10-30T08:59:19.463 回答