canvas中如何实现圆形背景图片?

 我来答
匿名用户
2014-02-08
展开全部
实现画布橡皮擦有两个思路:

1.用clearRect(x,
y, width, height)来实现,x, y 矩形的左上角的坐标。width,

height 矩形的尺寸。clearRect()
方法擦除了指定的矩形,并且用一个透明的颜色填充

它。我们用这个可以实现画布擦除,但它是矩形的。我也没有想出什么好的方法,所以

弃之,采用第二种方法!

2、第二种方法就是画出一个圆,此圆为透明,然后使相交部分变成透明的就ok了。

这里就用到了canvas的globalCompositeOperation函数了,简单来说,Composite(组

合),就是对你在绘图中,后绘制的图形与先绘制的图形之间的组合显示效果,比如在国画中,

你先画一笔红色,再来一笔绿色,相交的部分是一种混色,而在油画中,绿色就会覆盖掉相交

部分的红色,这在程序绘图中的处理就是Composite,Canvas
API中对应的函数就是

globalCompositeOperation,跟globalAlpha一样,这个属性是全局的,所以在使用的时

候要注意save和restore.

下面是每一个选项的说明:

source-over
默认,相交部分由后绘制图形的填充(颜色,渐变,纹理)覆盖,全部浏览器通过

source-in
只绘制相交部分,由后绘制图形的填充覆盖,其余部分透明,webkit两兄弟没有

通过

source-out
只绘制后绘制图形不相交的部分,由后绘制图形的填充覆盖,其余部分透

明,webkit两兄弟没有通过

source-atop
后绘制图形不相交的部分透明,相交部分由后绘制图形的填充覆盖,全部浏

览器通过

destination-over
相交部分由先绘制图形的填充(颜色,渐变,纹理)覆盖,全部浏览器通过

destination-in
只绘制相交部分,由先绘制图形的填充覆盖,其余部分透明,webkit两兄弟

没有通过

destination-out
只绘制先绘制图形不相交的部分,由先绘制图形的填充覆盖,其余部分透

明,全部浏览器通过

destination-atop
先绘制图形不相交的部分透明,相交部分由先绘制图形的填充覆

盖,webkit两兄弟没有通过

lighter
相交部分由根据先后图形填充来增加亮度,全部浏览器通过

darker
相交部分由根据先后图形填充来降低亮度,chrome通过,firefox官方说Firefox

3.6 / Thunderbird 3.1 /
Fennec
1.0以后版本移除这个效果-0-,why?safari看似可

以,但是无论你什么颜色,它都给填充成黑色,opera无效果

copy
只绘制后绘制图形,只有opera通过

xor
相交部分透明,全部浏览器通过

下面就是用上面的属性实现圆形橡皮擦的代码:

狠狠的点击这里-javascript
canvas画图实例(请使用支持canvas的chrome,firefox

等浏览器观看)

function
resetEraser(_x,_y,touch)
{

var
t=this;

t.cxt.globalCompositeOperation
=
"destination-out";
t.cxt.beginPath();

t.cxt.arc(_x,
_y, t.eraserRadius, 0, Math.PI *
2);

t.cxt.strokeStyle =
"rgba(250,250,250,0)";//使用颜色值为白色,透明为0的颜色填充
t.cxt.fill();
t.cxt.globalCompositeOperation
= "source-over"
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式