Javascript将URL中的动态图像绘制到canvas元素上

时间:2012-04-23 14:47:36

标签: javascript image canvas

我正在尝试使用其URL将动态PNG图像(由PHP脚本生成的图像)​​绘制到Canvas元素上。我无法为我正在测试的网页发布确切的网址,因为您必须登录该网站。

我正在使用的动态图片网址之一是:http://www.website.com/includes/dynamicimage.php?ID=29718958161

如果您已登录此特定网站并将该网址粘贴到地址栏中,则会正确显示该图片。但是,以下Javascript代码未正确地将其绘制到canvas元素上:

function checkImage(imageContext) {
    var canvas = document.createElementNS(
        'http://www.w3.org/1999/xhtml', 'canvas');
    canvas.width = imageContext.width;
    canvas.height = imageContext.height;

    var context = canvas.getContext("2d");
    var img = new Image();
    img.src = imageContext.src;
    context.drawImage(img, 0, 0);

    newWindow = window.open(imageContext.src, 'newWin', 'width=300,height=300');
    newWindow2 = window.open('', 'newWin2', 'width=300,height=300');
    newWindow2.document.body.appendChild(canvas);

    var imgd = context.getImageData(0, 0, imageContext.width,
        imageContext.height);
    var pix = imgd.data;
}

我有两个弹出窗口同时显示动态图像和绘制到画布的内容,但画布始终为空白。然后我在设置“pix”变量后尝试对图像进行进一步的RGB测试,但由于图像从未被绘制到canvas元素,因此该步骤失败。

1 个答案:

答案 0 :(得分:14)

您的问题是,在尝试将图像绘制到画布之前,您不是在等待图像加载。有关详细信息,请参阅this question中标题为 “安全播放” 的部分。

简而言之:

var img = new Image;      // First create the image...
img.onload = function(){  // ...then set the onload handler...
  ctx.drawImage(img,0,0);
};
img.src = "someurl";      // *then* set the .src and start it loading.