画布具有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;
}
}
答案 0 :(得分:1)
你很亲密。您可以浏览每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
这是一个小提琴。我在那里做了一些稍微不同的事情,但你明白了。