Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.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_Html_Canvas_Pixels - Fatal编程技术网

Javascript 在画布中使白色背景透明

Javascript 在画布中使白色背景透明,javascript,html,canvas,pixels,Javascript,Html,Canvas,Pixels,目前正在使用JavaScript和canvas去除图像的白色背景并使其透明。 下面的方法应该这样做,但是g.putImageDataimgd,0,0;最后一行给了我一个错误:TypeError:g.putImageData不是一个函数 为什么会这样,或者有没有一种更简单的方法可以让画布上所有白色背景的图像都透明 var imgd = g.getImageData(leftX,leftY,Weight,Height), pix = imgd.data, newColor = {r:0,g:0,b:

目前正在使用JavaScript和canvas去除图像的白色背景并使其透明。 下面的方法应该这样做,但是g.putImageDataimgd,0,0;最后一行给了我一个错误:TypeError:g.putImageData不是一个函数

为什么会这样,或者有没有一种更简单的方法可以让画布上所有白色背景的图像都透明

var imgd = g.getImageData(leftX,leftY,Weight,Height),
pix = imgd.data,
newColor = {r:0,g:0,b:0,a:0};

for (var i = 0, n = pix.length; i<n; i +=4) {
    var r = pix[i],
    g = pix[i+1],
    b = pix[i+2];

    if (r == 225 && g == 225 && b == 225 ) {
        pix[i] = newColor.r;
        pix[i+1] = newColor.g;
        pix[i+2] = newColor.b;
        pix[i+3] = newColor.a;
    }
}
g.putImageData(imgd,0,0);

在for循环中将g重新定义为绿色值,这样它就不再指向上下文。解决了这个问题,它应该可以正常工作除非您专门寻找E1E1白色,否则如果r>=225&&g>=225&&b>=225,您应该这样做。大多数图像都有噪声,白色的定义略有变化。@Rhumborl非常感谢您的帮助,如果画布上有许多图像,有没有办法使它们一次全部透明?@user3558118您必须将它们全部绘制,然后选择画布上当前的图像一次全部绘制,但这只会影响它们的可见状态。否则,可以使用数组和循环遍历它们all@user3558118. 您当前的方法将替换画布上的任何&所有白色像素,甚至图像中的白色像素。