国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

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

2020-03-24 17:26:50
字體:
來源:轉載
供稿:網友
使用Canvas繪制圖像的時候,我們經常會想要只保留圖像的一部分,這是我們可以使用canvas API再帶的圖像裁剪功能來實現這一想法。
Canvas API的圖像裁剪功能是指,在畫布內使用路徑,只繪制該路徑內所包含區域的圖像,不會只路徑外的圖像。這有點像Flash中的圖層遮罩。使用圖形上下文的不帶參數的clip()方法來實現Canvas的圖像裁剪功能。該方法使用路徑來對Canvas話不設置一個裁剪區域。因此,必須先創建好路徑。創建完整后,調用clip()方法來設置裁剪區域。
需要注意的是裁剪是對畫布進行的,裁切后的畫布不能恢復到原來的大小,也就是說畫布是越切越小的,要想保證最后仍然能在canvas最初定義的大小下繪圖需要注意save()和restore()。畫布是先裁切完了再進行繪圖。并不一定非要是圖片,路徑也可以放進去~先來看看一個簡單的Demo。JavaScript Code復制內容到剪貼板
style body{background:url( ./images/bg3.jpg )repeat;} #canvas{border:1pxsolid#aaaaaa;display:block;margin:50pxauto;} /style /head body divid= canvas-warp canvasid= canvas 你的瀏覽器居然不支持Canvas?!趕快換一個吧??! /canvas /div script window.onload=function(){ varcanvas=document.getElementById( canvas ); canvas.width=800; canvas.height=600; varcontext=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復制內容到剪貼板
functiondrawScreen(){ varx=canvas.width/2; vary=canvas.height/2; varradius=75; varoffset=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();
這個順序來進行調用。
html教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郁南县| 阜宁县| 淄博市| 尼木县| 明水县| 定陶县| 清丰县| 新民市| 衡阳县| 德令哈市| 杭锦后旗| 克山县| 高淳县| 萨迦县| 新丰县| 大丰市| 陇川县| 柳州市| 西吉县| 临高县| 太原市| 张家界市| 东乌珠穆沁旗| 永平县| 阜新市| 镇坪县| 高雄县| 时尚| 马边| 清新县| 崇明县| 新干县| 伊宁市| 深泽县| 通江县| 恩平市| 富宁县| 淮阳县| 临汾市| 赤城县| 汤阴县|