您如何alpha = 0
使用 HTML5 Canvas 进行绘图?想象一下,我正在制作一个 Photoshop 克隆,我有一个纯红色的图层。我选择橡皮擦工具并用它画画。它吸引了rgba(0,0,0,0)
我看透背景。如何在 HTML5 Canvas 中执行此操作?
这是一些代码。
var rand = function(v) {
return Math.random() * v;
};
var canvas = document.getElementsByTagName("canvas")[0];
var ctx = canvas.getContext("2d");
// fill the canvas with black
ctx.fillStyle = "red";
ctx.fillRect(0, 0, canvas.width, canvas.height);
// Erase some circles (draw them in 0,0,0,0);
ctx.fillStyle = "rgba(0,0,0,0)";
ctx.globalCompositeOperation = "copy";
for (var ii = 0; ii < 5; ++ii) {
ctx.beginPath();
ctx.arc(rand(canvas.width), rand(canvas.height),
rand(50) + 20, 0, 360, false);
ctx.fill();
}
/*
source-over
source-in
source-out
source-atop
destination-over
destination-in
destination-out
destination-atop
lighter
darker
copy
xor
*/
canvas {
margin: 10px;
border: 1px solid black;
background-color: yellow;
}
<div>Want red with yellow circles</div>
<canvas></canvas>
这行不通。所有画布操作都被认为是无限大的,这意味着绘制每个圆圈(弧)并globalCompositeOperation
设置为“复制”有效地擦除每个圆圈之外的所有内容。
我可能可以设置剪裁以匹配圆圈,但理想情况下我希望能够使用抗锯齿圆圈擦除,就像 Photoshop 画笔一样。