canvas clip()
clip翻譯成英文是切割的意思,的確名副其實,此方法具有切割功能。
它可以依照前面建立的路徑進行一次切割,然後所有在clip之後繪製的圖形只有在被切割的路徑內才會顯示,路徑外的則不得顯示。
看一個程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script type="text/javascript"> window.onload = function () { var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(100, 100, 50, 0, Math.PI * 2); ctx.clip(); ctx.beginPath(); ctx.rect(100, 100, 100, 100); ctx.fill(); } </script> </head> <body> <canvas id="canvas" width="350" height="250"></canvas> </body> </html>
上面的程式碼中,首先通過arc方法繪製一個路徑,然後用clip方法進行切割。
後面繪製的圖形只會在這個切割的路徑內顯示。
就如同將一個遮罩覆蓋在牆上,然後在這個遮罩上摳掉一部分割槽域,如果想要在牆上繪製圖案,只能夠在這個摳除的部分進行操作。clip之後,這個遮罩切除效果一直都會存在,無論後面有多少路徑。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script type="text/javascript"> window.onload = function () { var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(100, 100, 50, 0, Math.PI * 2); ctx.clip(); ctx.beginPath(); ctx.rect(100, 100, 100, 100); ctx.fill(); ctx.beginPath(); ctx.fillStyle = "#F00"; ctx.arc(100, 100, 100, 0, Math.PI * 2); ctx.fill(); } </script> </head> <body> <canvas id="canvas" width="350" height="250"></canvas> </body> </html>
後面儘管有多個路徑,但是繪圖區域依然被限制在切割之前的路徑之內。
二.解除clip切割的限制:
使用save和restore方法可以解除clip()切割的顯示。
關於上述兩個方法具體用法可以參閱canvas save()和restore()方法一章節。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script type="text/javascript"> window.onload = function () { var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.save(); ctx.arc(100, 100, 50, 0, Math.PI * 2); ctx.clip(); ctx.beginPath(); ctx.rect(100, 100, 100, 100); ctx.fill(); ctx.restore(); ctx.beginPath(); ctx.fillStyle = "#F00"; ctx.arc(100, 100, 100, 0, Math.PI * 2); ctx.fill(); } </script> </head> <body> <canvas id="canvas" width="350" height="250"></canvas> </body> </html>
再來看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script type="text/javascript"> window.onload = function () { var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ctx.arc(100, 100, 50, 0, Math.PI * 2); ctx.beginPath(); ctx.clip(); ctx.beginPath(); ctx.rect(100, 100, 100, 100); ctx.fill(); ctx.beginPath(); ctx.fillStyle = "#F00"; ctx.arc(100, 100, 100, 0, Math.PI * 2); ctx.fill(); } </script> </head> <body> <canvas id="canvas" width="350" height="250"></canvas> </body> </html>
上面的程式碼不能夠繪製任何圖案,這是因為clip()方法前面最近的beginPath()方法後面沒有繪製任何路徑,所以clip()方法也就不能夠切割任何路徑,也就是麼能在牆的遮罩上摳除任何區域,當然無法再牆面上繪圖了。
相關文章
- [基礎] CLIP
- css: clip淺析CSS
- CSS background-clipCSS
- CSS clip-pathCSS
- CSS3 clipCSSS3
- clip-cnblog
- tf.clip_by_value() 用法
- 理解 OpenAI 的 CLIP 模型OpenAI模型
- 【論文系列】之 ---- CLIP
- CSS3 background-clipCSSS3
- WPF Image Image clip EllipseGeometry
- 有意思的clip-path
- clip實現圓環進度條
- clip和z-index的用法Index
- 半透明邊框與background-clip
- background-clip 和 background-origin
- CSS3 clip-path 用法介紹CSSS3
- 認識CSS屬性之clip-pathCSS
- canvasCanvas
- Apple App Clip(蘋果「輕應用」)詳解APP蘋果
- background-origin和background-clip區別
- EasyNLP帶你玩轉CLIP圖文檢索
- CSS3背景裁切屬性——background-clipCSSS3
- 利用 clip-path 實現動態區域裁剪
- Clip Studio Paint for Mac(CSP漫畫工作室)AIMac
- Stable Diffusion WebUI 頁面設定: 顯示 VAE CLIPWebUI
- canvas clearRect()Canvas
- canvas toBlob()Canvas
- canvas toDataURL()Canvas
- canvas stroke()Canvas
- canvas fill()Canvas
- canvas fillRect()Canvas
- canvas translate()Canvas
- canvas rotate()Canvas
- canvas scale()Canvas
- canvas fillText()Canvas
- canvas createPattern()Canvas
- canvas createImageData()Canvas