如何在画布元素中清除一个多边形区域?

3
我使用了clearRect函数,但没有看到多边形的等效函数。我天真地尝试了以下操作:
ctx.fillStyle = 'transparent';
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100,50);
ctx.lineTo(50, 100);
ctx.lineTo(0, 90);
ctx.closePath();
ctx.fill();

但这只是绘制了一个透明区域,并没有对已经存在的内容产生影响。有没有一种方法可以清除画布元素内部的多边形区域?

1个回答

15

您可以使用合成操作,将其设置为'destination-out',以实现此目的:compositing

ctx.globalCompositeOperation = 'destination-out';
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100,50);
ctx.lineTo(50, 100);
ctx.lineTo(0, 90);
ctx.closePath();
ctx.fill();

例子:

在此输入图像描述

jsFiddle上试试吧。


5
谢谢,乔纳斯!自己注意:为了使此操作按预期工作,您需要使用不透明的填充颜色(不要使用alpha透明度)。 - Benjie
谢谢@Benjie,你的评论完善了答案,我已经寻找很久了。 - Manuel Ferreiro
工作得很好 - 链接到合成已经移动了。 - TadLewis
我意识到这是一个相当老的答案,但是jsFiddle不再起作用了。也许canvas规格发生了变化? - Loko Web Design

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接