所有分类
  • 所有分类
  • 后端开发
Canvas神器!画出框框就搞定,裁图如此简单

Canvas神器!画出框框就搞定,裁图如此简单

使用图形上下文的不带参数的clip()方法来实现Canvas的图像裁剪功能。该方法使用路径来对Canvas话不设置一个裁剪区域。创建完整后,调用clip()方法来设置裁剪区域。

Canvas图像裁剪概述

Canvas要截图,只想看局部咋办呀?别慌!API里的clip()功能就能实现。就跟Flash的图层遮罩似的,让你随手动线画出个框,再调用clip(),图像自然就被框住了。设定下路径,用clip()定好裁剪范围就行。

Canvas中的save()和restore()

用Canvas裁图可得小心得记得用它的save()跟restore()这两个小助手!一不小心点错了,画布是会变小的,要想重新弄回来那可是麻烦事儿。所以在开始动手之前,先存个像模像样的备份,万一不想要了,随时删除还原就行。这样Canvas就能一直保持最初的大小啦~

使用不带参数的clip()方法

Canvas里面的clip()功能,真是太好用了!只要学会怎么用,就像找到了一把效率加倍器。这个功能可以帮我们随意把画出的图形框住不想要的地方。你只需在要用到之前,先拿笔画个要剪掉的地方,然后使用咱们熟知的clip(),就让画布来自动搞定其他部分~

混合使用save()和restore()

   
   
   
       
    裁剪区域   
       
        body { background: url("./images/bg3.jpg") repeat; } 
        #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }   
       
   
   

你的浏览器居然不支持Canvas?!赶快换一个吧!!

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(); };

原来使用save()和restore()就能搞定画画的范围了,局部显真是小意思!首先得先用rect()画出个框框(画图区),然后再用clip()给裁剪一下。这么一整,不管你在ctx里搞什么名堂,都只会显示出框框里面的部分。当然,要是不想要这框子了,直接来一次Restore(恢复),就能瞬间回到未裁剪时的画面咯。

示例演示与说明

来咯来给大家科普下怎样在Canvas上面剪图哈~先把想保留的那部分框出来,然后用clip()功能轻松搞定它。当然还得记得Store()和Restor()这对默契十足的兄弟,有了它们,画板就能任你随意挥洒!

Canvas神器!画出框框就搞定,裁图如此简单

常见调用形式

简单来说,利用Canvas剪裁图片就两个步骤啦:先把现在的网页存个备胎;然后按照想要的形状画出剪切线(用clip());最后如果不想要裁剪后的图了,就点restore()恢复原状就好!

注意事项与技巧

哥们儿,你会在CANVAS上剪辑图片不?别忘了搞定保存和还原功能,预防万一嘛!选个路径,然后把不想留的部分咔嚓掉就行了。不过要明白, save()跟 restore()可不是吃素的,它俩可以操控我们的绘画区域!至于 clip()这个小技巧,只能在特定地方用,而且不会让画布尺寸发生变化!

Canvas神器!画出框框就搞定,裁图如此简单

结合实际场景应用

想过没有?图片处理不仅可以简简单单的剪裁,还能玩出花样,照片变得更加有活力!就比如在游戏中,我们能用Canvas图片调整来让角色移动呢;同样,在讲解数据时用它来强调关键信息也是很牛的方法喔!

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();   
    }

总结与展望

看完这个文章,就懂得如何用HTML5Canvas中的clip()方法局部展图。别忘了保存(save())和还原(restore())功能,关键时候能派上大用场。遇到具体问题时,大胆尝试运用!

懂得HTML5 Canvas的同学们,快来聊聊!还有不明白或者想分享点啥的都别客气。

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

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/04/14498.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?