html5在线裁剪,HTML5 Canvas裁剪clip

裁剪(即clip())是渲染上下文中的绘制方法之一。很多人都以为这是一个清除概念,其实是错的。虽然从表现上看像清除,但是由于剪切区域由绘图路径设定,因此这是一个独立的显示区域。

在Canvas动画中,裁剪区域之外的动画不受影响,平时在处理图像时经常会遇到这种需求。与之类似的有一些算法,如脏矩阵算法等。

clip()方法通过计算所有的子路径来建立新的剪切区域,未闭合的子路径在填充区按照闭合方式填充,但并不影响实际的子路径集合,新的剪切区域将替换当前的剪切区域。剪切区域可以是任何可以绘制的轮廓形状。所以,裁剪路径其实就是绘图路径,只不过这个路径不是拿来绘图的,

而是设定显示区域和遮挡区域的一个分界线。如果你熟悉Flash的话,这有点类似于Flash的遮罩。

下面请看一个例子,代码如下:

setInterval(function(){

var mycanvas = document.getElementById('mycanvas');

var ctx=mycanvas.getContext('2d');

ctx.fillRect(0,0,500,500); //填充区的大小为500×500

ctx.save();

ctx.translate(250,250); //将当前坐标移动到(250, 250)位置上

ctx.beginPath(); //拟定路径

ctx.arc(0,0,200,0,Math.PI*2,true);//画出一个半径为200的圆

ctx.clip(); //裁剪上面的圆

//对裁剪区域进行加样式处理

var linearGradient = ctx.createLinearGradient(0,-300,0,250);//设定起始点

linearGradient.addColorStop(0, '#FF0000'); //渐变色0

linearGradient.addColorStop(1, '#004080'); //渐变色1

ctx.fillStyle = linearGradient;

ctx.fillRect(-250,0,500,500); //裁剪的重要一步,由于上面已经开始了tanslate,

//因此这里需要调整到-250

for(var j=1;j<250;j++){ //生成的粒子的密度

ctx.save();

ctx.fillStyle = '#FFFF00';

ctx.translate(250-Math.floor(Math.random()*500),

250-Math.floor(Math.random()*500));

drawParticl(ctx,Math.floor(Math.random()*10)); //粒子生成

ctx.restore();

}

ctx.restore();

},100);

function drawPartical(ctx,r){ //画粒子

ctx.save();

ctx.beginPath()

ctx.moveTo(r,0);

for(var i=0;i<10;i++){

ctx.rotate(Math.PI/Math.random()*20); //旋转图形,这是生成图形的关键

ctx.lineTo(r,0);

}

ctx.closePath();

ctx.fill();

ctx.restore();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值