javascript - 检查 Canvas 像素是否为给定颜色

标签 javascript

Canvas 具有 CSS background-color: #D3D3D3; 和一个属性 ctx.fillStyle = "#000";
这段 JS 代码需要保持笔画完好无损,并使其他所有内容都成为透明背景。如何实现?

imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;

let clearBack = imageData;
for (var i = 3; i < clearBack.length; i += 4) {
  if (pixle is not black) { //if pixel belongs to the stroke leave it
    clearBack[i] = 0;
  }
}

最佳答案

你很接近。您可以每 4 个像素(红绿蓝 alpha)检查一次并使用 imageData 检查每种颜色。然后,如果它不是黑色的,就用它做你想做的。

您可以使用 putImageData 将任何修改过的像素重写回屏幕。不过,请确保将原始 ImageData 对象保留在 imageData var 中。

imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); //take away the .data

var r, g, b, a;

for(var i = 0; i+3 < imageData.data.length; i+=4) {
    r = imageData.data[i];
    g = imageData.data[i+1];
    b = imageData.data[i+2];
    a = imageData.data[i+3];

    if((r > 0 || g > 0 || b > 0) && a > 0) { // if pixel is not black, and not transparent          
        imageData.data[i+3] = 0; //set alpha to 0
    }
}

ctx.putImageData(imageData, 0, 0); //put the imageData back to the screen

这是一个 fiddle 。我在那里做了一些稍微不同的事情,但你明白了。

https://jsfiddle.net/q0n5sxku/

关于javascript - 检查 Canvas 像素是否为给定颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871779/

相关文章:

javascript - 在 django 中比较日期并验证]

javascript - HTML Mobile - 强制隐藏软键盘

javascript - 选择除 sibling 和自身之外的所有元素

javascript - 为d3js的线条元素添加边框

javascript - Google map - 当信息窗口关闭或其他单选按钮过滤器为 "ticked"时缩小

javascript - Angularjs ng-repeat 新元素

javascript - 使用 yep/nope 和 document.ready

javascript - Polymer:回调VS事件

javascript - 一旦我删除了一个属性,我就无法添加它

javascript - 验证 : Add custom hover style to v-btn