HTML5 canvas 之 clip

今天学习HTML5 canvas clip() 方法时,发现其几乎都要与save()与restore()方法嵌套使用,不这样效果又达不到期望,故自己做了一下一些尝试,以加深理解。


 

1. 主要代码及效果图如下

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<canvas id="mc" width="800" height="800"
        style="border:1px solid black"></canvas>
<script type="text/javascript">

    var canvas = document.getElementById('mc');
    var ctx = canvas.getContext('2d');

    var image1 = new Image();
    image1.src = "star.jpg";
    var image2 = new Image();
    image2.src = "littleCh.jpg";

    image1.onload = function () {

       // ctx.save();

        ctx.beginPath();
        ctx.arc(400, 250, 130, 0, Math.PI, false);
        ctx.lineTo(400, 250);
        ctx.closePath();
        ctx.strokeStyle = "#f00";
        ctx.lineWidth = 10;

        //ctx.clip();

        ctx.drawImage(image1, 100, 100);
        ctx.stroke();

      //  ctx.restore();

       // ctx.save();

        ctx.beginPath();
        ctx.arc(400, 450, 200, 0, Math.PI, false);
        ctx.lineTo(400, 450);
        ctx.closePath();

      //  ctx.clip();

        ctx.drawImage(image2, 100, 400);

        ctx.stroke();

      // ctx.restore();
    }

</script>
</body>
</html>

红色弧为clip即将划分的区域

 

2.两clip()去注释尝试

 所说的去注释,即为将  “//ctx.clip(); ”  改为 “ ctx.clip(); ”

 

由此可见,前面的clip的区域会作用于后面的图形显示,而后面clip的区域则不作用于前面的图形显示 ;这也解释了第三个图片,由于第一个clip导致了两个图片只显示蜡笔小新的一部分,而第二个clip导致樱桃小丸子只显示一部分,但由于第一个clip的作用,这部分将不显示。

 

3.嵌套save()与restore()

为了能达到预期目的,我们还是注意嵌套使用clip()方法,但我们去掉代码六处注释时,会是以下效果图。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值