Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取画布图像数据?_Javascript_Jquery_Canvas - Fatal编程技术网

Javascript 如何获取画布图像数据?

Javascript 如何获取画布图像数据?,javascript,jquery,canvas,Javascript,Jquery,Canvas,我试图读取图像的数据,但每次都给我一个空白数组 当我检查控制台日志中的数组输出时,它总是为空 // function to convert rgb to hex function rgbToHex(r, g, b) { if (r > 255 || g > 255 || b > 255) throw "Invalid color component"; return ((r << 16) | (g &l

我试图读取图像的数据,但每次都给我一个空白数组

当我检查控制台日志中的数组输出时,它总是为空

// function to convert rgb to hex
    function rgbToHex(r, g, b) {
        if (r > 255 || g > 255 || b > 255)
            throw "Invalid color component";
        return ((r << 16) | (g << 8) | b).toString(16);
    }
// load image to canvas 
     function Load_mg(can_id,mg_src) {
        var ctx = document.getElementById(can_id);
        if (ctx.getContext) {
            ctx = ctx.getContext('2d');
            var img1 = new Image();
            img1.onload = function () {
                ctx.drawImage(img1, 0, 0);
            };
            img1.src = mg_src;
        }
    var can_ida = document.getElementById(can_id);  
    //var imgData = ctx.getImageData(0,0,can_ida.width,can_ida.height);
     var imgData = ctx.getImageData(10, 10, 50, 50);
    var data = imgData.data;    

    for(var i=0; i<data.length; i+=4) {
      var red = data[i];
      var green = data[i+1];
      var blue = data[i+2];
      var alpha = data[i+3];
      if(red != 0){
      console.log('some color found');
      break;
      }
      var hex = "#" + ("000000" + rgbToHex(red,green, blue)).slice(-6);
    //  console.log('can_data hex '+hex+' Alpha '+alpha);
      //if(i === 1000)break;  
    }

    console.log(data);

    } // function end point
    Load_mg('test1','box_1.png');
小提琴:


在fiddle中,我通过base64图像数据加载了图像

要修复此问题,只需将get pixel代码移到onload事件中即可

// function to convert rgb to hex
function rgbToHex(r, g, b) {
    return "#" + (r < 10 ? "0" : "") + r.toString(16) +
           (g < 10 ? "0" : "") + g.toString(16) +
           (b < 10 ? "0" : "") + b.toString(16);
}
// load image to canvas
function Load_mg(can_id, mg_src) {
    var ctx = document.getElementById(can_id);
    if (ctx.getContext) {
        ctx = ctx.getContext('2d');
        var img1 = new Image();
        img1.onload = function () {
            ctx.drawImage(this, 0, 0);
            var can_ida = document.getElementById(can_id);
            //var imgData = ctx.getImageData(0,0,can_ida.width,can_ida.height);
            var imgData = ctx.getImageData(10, 10, 50, 50);
            var data = imgData.data;

            for (var i = 0; i < data.length; i += 4) {
                var red = data[i];
                var green = data[i + 1];
                var blue = data[i + 2];
                var alpha = data[i + 3];
                if (red != 0) {
                    console.log('some color found');
                    break;
                }
                var hex = rgbToHex(red, green, blue);
            }
        };
        img1.src = mg_src;
    }

}
Load_mg('test1', 'box_1.png');

在绘制图像之前调用getImageData,这在图像的onload事件处理程序中异步发生。您还必须在此事件处理程序内调用getImageData。可能存在重复的