html5-canvas – 如何在画布上填充“相反”的形状?

前端之家收集整理的这篇文章主要介绍了html5-canvas – 如何在画布上填充“相反”的形状?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我在HTML5画布上有一个圆(弧)。我可以这样填写:
ctx.arc(100,100,50,2 * Math.PI);
ctx.fill();

它是一个治疗。但是,如何填补相反的区域?现在它是一个黑色的圆圈是白色的,但我希望它沿着以下图像的线条(其中白色是背景颜色,黑色是填充颜色):

我知道我只能使用黑色的背景,画一个白色的圆圈,但背景可以是任何东西(以前已经画过的各种东西,所以只是交换颜色是不可能的)。

另一件事是,不应该填写完整的画布,而是取消了一个圆形的正方形。

我正在考虑一个globalCompositeOperation,但似乎不符合我的需要,因为他们都不按照我的需要行事。

那么,如何完成填充“对面”区域,如示例图像?

解决方法

您可以使用另一个画布作为掩码:
// This is the canvas where you want to draw
var canvas = document.getElementById('your-canvas');
var ctx = canvas.getContext('2d');

// I'll use a skyblue background that covers everything
// Just to demonstrate
ctx.fillStyle = "skyblue";
ctx.fillRect(0,canvas.width,canvas.height);

// Create a canvas that we will use as a mask
var maskCanvas = document.createElement('canvas');
// Ensure same dimensions
maskCanvas.width = canvas.width;
maskCanvas.height = canvas.height;
var maskCtx = maskCanvas.getContext('2d');

// This color is the one of the filled shape
maskCtx.fillStyle = "black";
// Fill the mask
maskCtx.fillRect(0,maskCanvas.width,maskCanvas.height);
// Set xor operation
maskCtx.globalCompositeOperation = 'xor';
// Draw the shape you want to take out
maskCtx.arc(30,30,10,2 * Math.PI);
maskCtx.fill();

// Draw mask on the image,and done !
ctx.drawImage(maskCanvas,0);
<canvas id="your-canvas">

Demo here

原文链接:https://www.f2er.com/html5/169175.html

猜你在找的HTML5相关文章