首页前端开发HTML使用HTML5 Canvas API中的clip()方法裁剪区域图像

使用HTML5 Canvas API中的clip()方法裁剪区域图像

时间2024-01-23 11:46:27发布访客分类HTML浏览702
导读:收集整理的这篇文章主要介绍了使用HTML5 Canvas API中的clip( 方法裁剪区域图像,觉得挺不错的,现在分享给大家,也给大家做个参考。这篇文章主要介绍了使用HTML5 canvas API中的clip( 方法裁剪区域图像的实例教...
收集整理的这篇文章主要介绍了使用HTML5 Canvas API中的clip()方法裁剪区域图像,觉得挺不错的,现在分享给大家,也给大家做个参考。这篇文章主要介绍了使用HTML5 canvas API中的clip()方法裁剪区域图像的实例教程,其中需要特别注意save()和reStore()方法的搭配使用,需要的朋友可以参考下

使用Canvas绘制图像的时候,我们经常会想要只保留图像的一部分,这是我们可以使用canvas API再带的图像裁剪功能来实现这一想法。
Canvas API的图像裁剪功能是指,在画布内使用路径,只绘制该路径内所包含区域的图像,不会只路径外的图像。这有点像Flash中的图层遮罩。

使用图形上下文的不带参数的clip()方法来实现Canvas的图像裁剪功能。该方法使用路径来对Canvas话不设置一个裁剪区域。因此,必须先创建好路径。创建完整后,调用clip()方法来设置裁剪区域。
需要注意的是裁剪是对画布进行的,裁切后的画布不能恢复到原来的大小,也就是说画布是越切越小的,要想保证最后仍然能在canvas最初定义的大小下绘图需要注意save()和restore()。画布是先裁切完了再进行绘图。并不一定非要是图片,路径也可以放进去~

先来看看一个简单的Demo。

JavaScript Code复制内容到剪贴板

!DOCTYPE htML>
       html lang="zh">
       head>
           meta charset="UTF-8">
           tITle>
    裁剪区域/title>
           style>
           body {
     background: url("./images/bg3.jpg") repeat;
 }
         #canvas {
     border: 1px solid #aaaaaa;
     display: block;
     margin: 50px auto;
 }
           /style>
       /head>
       body>
       p id="canvas-warp">
           canvas id="canvas">
               你的浏览器居然不支持Canvas?!赶快换一个吧!!       /canvas>
       /p>
         script>
       window.onload = function(){
               VAR canvas = document.getElementById("canvas");
               canvas.width = 800;
               canvas.height = 600;
               var context = canvas.getContext("2d");
               context.fillStyle = "#FFF";
               context.fillRect(0,0,800,600);
                 //在屏幕上绘制一个大方块           context.fillStyle = "black";
               context.fillRect(10,10,200,200);
               context.save();
               context.beginPath();
                 //裁剪画布从(0,0)点至(50,50)的正方形           context.rect(0,0,50,50);
               context.clip();
                 //红色圆           context.beginPath();
               context.strokeStyle = "red";
               context.lineWidth = 5;
               context.arc(100,100,100,0,Math.PI * 2,false);
               //整圆           context.stroke();
               context.closePath();
                 context.restore();
                 //再次裁切整个画布           context.beginPath();
               context.rect(0,0,500,500);
               context.clip();
                 //绘制一个没有裁切的蓝线           context.beginPath();
               context.strokeStyle = "blue";
               context.lineWidth = 5;
               context.arc(100,100,50,0,Math.PI * 2,false);
               //整圆           context.stroke();
               context.closePath();
       }
    ;
       /script>
       /body>
       /html>
    


运行结果:

混合使用save()和restore()方法,我们可以限定画画区域。首先我们可以使用rect()方法包围一个我们希望画画的区域,然后使用clip()方法把该区域裁剪下来。

这样以后我们不管在context中做了什么操作,只有限定的部分显示出来。也就是说clip()的作用是限定要显示的区域。当我们不希望继续限定区域了,可以使用restore()方法跳出来,继续操作原来的context。
再来看这样一个裁剪:

JavaScript Code复制内容到剪贴板

function drawScreen() {
               var x = canvas.width / 2;
               var y = canvas.height / 2;
               var radius = 75;
               var offset = 50;
                 //裁剪的区域为 (x, y)为中心半径为75的圆           context.save();
               context.beginPath();
               context.arc(x, y, radius, 0, 2 * Math.PI, false);
               context.clip();
                 // 先画一个蓝色的圆弧, 超过裁剪的部分不显示           context.beginPath();
               context.arc(x - offset, y - offset, radius, 0, 2 * Math.PI, false);
               context.fillStyle = 'blue';
               context.fill();
                 // 画一个黄色的圆弧, 超过裁剪的部分不显示           context.beginPath();
               context.arc(x + offset, y, radius, 0, 2 * Math.PI, false);
               context.fillStyle = 'yellow';
               context.fill();
                 // 画一个红色的圆弧, 超过裁剪的部分不显示           context.beginPath();
               context.arc(x, y + offset, radius, 0, 2 * Math.PI, false);
               context.fillStyle = 'red';
               context.fill();
                 /*          * restore()方法会返回到context原先的状态,在这里是clip()之前的状态。           * 大家可以移除context.beginPath()方法,试试会发生什么。           */          context.restore();
               context.beginPath();
               context.arc(x, y, radius, 0, 2 * Math.PI, false);
               context.lineWidth = 10;
               context.strokeStyle = 'blue';
               context.stroke();
       }
    

再次强调,一般使用裁剪功能的调用形式是

save();
    clip();
    restore();
    

这个顺序来进行调用。

相关推荐:

HTML5 Canvas绘制时指定颜色与透明度的方法

使用HTML5 Canvas为图片填充颜色和纹理

以上就是使用HTML5 Canvas API中的clip()方法裁剪区域图像的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 关于HTML5实现图片压缩上传功能下一篇:HTML5 Canvas绘制时指定颜色与透...猜你在找的html5相关文章 关于移动端h5开发相关内容总结2022-05-17html5教程-学表单的第二天2018-12-10html5教程-HTML5浏览器支持2018-12-10html5教程-HTML5智能表单2018-12-10html5教程-微信H5使用resLoader实现加载页效果2018-12-10html5教程-day01-初级-JS0-热身运动JS入门教程2018-12-10html5教程-html5shiv.js和respond.min.js2018-12-10html5教程-不同浏览器对于html5 audio标签和音频格式的兼容性2018-12-10html5教程-使用Html5实现手风琴案例2018-12-10html5教程-html5笔记2018-12-10 其他相关热搜词更多phpjavapython程序员load

若转载请注明出处: 使用HTML5 Canvas API中的clip()方法裁剪区域图像
本文地址: https://pptw.com/jishu/584154.html
HTML5 Canvas绘制时指定颜色与透明度的方法 使用HTML5 Canvas为图片填充颜色和纹理

游客 回复需填写必要信息