试图在没有 get/putImageData 的情况下在 canvas 上操纵 alpha?

Trying to manipulate alpha on a canvas without get/putImageData?

情况基本上是绘制几个具有基本线性渐变的移动原始形状,以便它们重叠在透明空白上 canvas。在它们重叠的地方,alpha 通道值会发生变化(即,它们会渗出)。

最后阶段是对每个单独像素的 alpha 进行四舍五入,因此它是 0 或 255,具体取决于它更接近哪个。

使用 imageData 很容易做到 -

var ctxImage = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);
var ctxData = ctxImage.data;
for (var i = 0; i < ctxData.length; i += 4) {
    ctxData[i + 3] = ctxData[i + 3] > 128 ? 255 : 0;
    // or ctxData[i + 3] = Math.round(ctxData[i + 3] / 255) * 255;
}
ctx.putImageData(ctxImage, 0, 0);

由于 getImageData 在 CPU 时间内非常昂贵,我希望找到一个使用 globalCompositeOperation 的解决方案,但似乎无法让它工作,有什么想法吗?

没有其他方法可以将 alpha 对齐为 0 || 255.

合成让源像素或目标像素保留下来,但不会像您描述的那样捕捉 alpha。