getImageData总是返回0

iam*_*cel 8 javascript html5 canvas getimagedata

我一直在尝试制作一个比较HTML5和Javascript中的两个图像的脚本.但由于一些奇怪的原因,它总是返回图像是完全相同的.

在查看问题可能是什么时,我发现每个像素的每个数据值都返回,出于某种奇怪的原因,"0".

那么,任何关于我做错了什么的想法?:)

出于某种原因,我觉得这很简单,但我刚学会了画布元素,所以是的.

这是我的代码:

function compareImg() {
    var c1 = document.getElementById("c");
    var ctx1 = c1.getContext("2d");
    var c2 = document.getElementById("c2");
    var ctx2 = c2.getContext("2d");

    var match = 0;

    var img1 = new Image();
    img1.src = "cat.jpg";
    img1.onload = function() {
        ctx1.drawImage(img1, 0, 0);
    }
    var img2 = new Image();
    img2.src = "bird.jpg";
    img2.onload = function() {
        ctx2.drawImage(img2, 0, 0);
    }


    for(var x = 0; x<c1.width; x++) {  // For each x value
        for(var y = 0; y<c1.height; y++) { // For each y value
            var data1 = ctx1.getImageData(x, y, 1, 1);
            var data2 = ctx2.getImageData(x, y, 1, 1);
            if (data1.data[0] == data2.data[0] && data1.data[1] == data2.data[1] && data1.data[2] == data2.data[2]) {
                match++;
            }
        }
    }
    var pixels = c1.width*c1.height;
    match = match/pixels*100;
    document.getElementById("match").innerHTML = match + "%";
}
Run Code Online (Sandbox Code Playgroud)

Phr*_*ogz 6

在进行比较之前,您不会等待图像加载和绘制.试试这个:

var img = new Image;
img.onload = function(){
  ctx1.drawImage(img,0,0);
  var img = new Image;
  img.onload = function(){
    ctx2.drawImage(img,0,0);
    // diff them here
  };
  img.src = 'cat.jpg';
};
img.src = 'cat.jpg';
Run Code Online (Sandbox Code Playgroud)

如上图所示,你应该总是设置你src 你的onload.