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剪裁图片就两个步骤啦:先把现在的网页存个备胎;然后按照想要的形状画出剪切线(用clip());最后如果不想要裁剪后的图了,就点restore()恢复原状就好!
注意事项与技巧
哥们儿,你会在CANVAS上剪辑图片不?别忘了搞定保存和还原功能,预防万一嘛!选个路径,然后把不想留的部分咔嚓掉就行了。不过要明白, save()跟 restore()可不是吃素的,它俩可以操控我们的绘画区域!至于 clip()这个小技巧,只能在特定地方用,而且不会让画布尺寸发生变化!
结合实际场景应用
想过没有?图片处理不仅可以简简单单的剪裁,还能玩出花样,照片变得更加有活力!就比如在游戏中,我们能用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();
。
评论0