Как вы рисуете с помощью alpha = 0
в холст HTML5? Представьте, что я делаю клонирование фотошопа, у меня слой сплошной красный. Я выбираю инструмент ластик и рисую. Он рисует в rgba (0,0,0,0)
, позволяя мне просматривать фон. Как это сделать в холсте HTML5?
Вот какой код.
<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
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>
</div>
</div>
Это не работает. Все операции с холстом считаются бесконечно большими, что означает, что каждый круг (дуга) с globalCompositeOperation
, установленный для «копирования», эффективно стирает все за пределами каждого круга.
Я мог бы настроить обрезку, чтобы соответствовать кругу, но в идеале я хотел бы стереть с помощью сглаженного круга, как и кисть фотошопа.