边玩边学HTML5(6):裁剪路径
什么是裁剪呢?打个不恰当的比方吧,你用一块布把电视机屏幕遮住了,这时候电视机屏幕上的任何变化你都看不见了。
但是,如果你布上裁剪出一块区域,那么至少这块区域里的屏幕变化你能看见。
当然裁剪区域之外的屏幕也在不停地变化(即也在重新绘制),只是你看不见罢了。这就是所谓的裁剪,平常在处理图像时经常会遇到这种需求。
那么什么又是裁剪路径呢?上面说要在布上裁剪出一块区域,这块区域是怎么来的呢?
这块区域是在裁剪动作 clip 之前,由绘图路径设定的,他可以是方形、圆形、五星形和其他任何可以绘制的轮廓形状。
所以,裁剪路径其实就是绘图路径,只不过这个路径不是拿来绘图的,而是设定显示区域和遮挡区域的一个分界线。
如果你不明白什么是绘图路径,在前的文章 边玩边学HTML5(2):基础绘图 中有介绍。
下面的例子用了两种方法进行裁剪。第一种方法显示一来回移动的圆形裁剪区域,大体流程如下:
1、清空画布
2、改变圆心位置
3、在新的圆心位置处设置一个圆形的裁剪区域
4、在画布上绘制美女图像
由于我们不停地在新位置处设定裁剪区域,我们就能看见裁剪区域在移动,而裁剪区域之外的图像并没有显示出来
我们用 clip 方法设置裁剪区域,之后绘制的图形只能显示裁剪区域内的一部分,而裁剪区域之外总是显示画布的背景色。
假如并不想完全遮挡裁剪区域之外的图像,比如我们想让裁剪区域之内的图像完全显示出来,但是裁剪区域之外的图像以半透明的方式显示出来,该怎么做呢?
这就要用到我们上面说的的组合知识了。第二中方法显示半透明的遮挡,大体思路如下:
1、清空画布
2、将画布的所有区域用一种半透明的颜色填充,这里我用的是灰色,透明度0.9
3、改变圆心位置
4、在新的圆心位置处以 XOR 方式绘制圆,这样和圆形重叠的部分将被擦除掉。
这时候我们得到的图形效果是一个半透明的画布,上面有一块完全透明的圆形区域。
5、 在第 4 步的基础上,以 destination-over 方式绘制美女图像,这时候美女图像将会出现在第 4 步图形效果的下方,想象一下,正好是我们想要的效果吧?!
效果如下:
你还可修改部分代码再运行看看哦
详细代码:


欢迎留言