微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼
最近在研究拼圖驗(yàn)證碼實(shí)現(xiàn),需要對(duì)圖片的部分模塊進(jìn)行特殊形狀切割出一小塊,明白后原來(lái)是如此簡(jiǎn)單,第一步就是將所有繪制的形狀用線勾出(直線、弧線、貝塞爾曲線都可以)形成閉環(huán),第二步就是切割繪制,第二步不麻煩,麻煩的只是第一步,需要一些計(jì)算,所以會(huì)在以后,盡力的多保存一些特殊形狀的方法。
比如:
代碼
drawPic(x,y,r){ // const ctxBackground = wx.createCanvasContext('canvasBackground') const ctxBackground = wx.createCanvasContext('canvasBackground') ctxBackground.save(); //開(kāi)始一個(gè)新的繪制路徑 ctxBackground.beginPath(); //設(shè)置路徑起點(diǎn)坐標(biāo) ctxBackground.moveTo(x, y); ctxBackground.arcTo(x, y - r, x + r, y - r, r); ctxBackground.lineTo(x + 2 * r, y - r); ctxBackground.arcTo(x + 2 * r, y - 2 * r, x + 3 * r, y - 2 * r, r); ctxBackground.arcTo(x + 4 * r, y - 2 * r, x + 4 * r, y - r, r); ctxBackground.lineTo(x + 5 * r, y - r); ctxBackground.arcTo(x + 6 * r, y - r, x + 6 * r, y, r); ctxBackground.lineTo(x + 6 * r, y + r); ctxBackground.arcTo(x + 7 * r, y + r, x + 7 * r, y + 2 * r, r); ctxBackground.arcTo(x + 7 * r, y + 3 * r, x + 6 * r, y + 3 * r, r); ctxBackground.lineTo(x + 6 * r, y + 4 * r); ctxBackground.arcTo(x + 6 * r, y + 5 * r, x + 5 * r, y + 5 * r, r); ctxBackground.lineTo(x + 4 * r, y + 5 * r); ctxBackground.arcTo(x + 4 * r, y + 4 * r, x + 3 * r, y + 4 * r, r); ctxBackground.arcTo(x + 2 * r, y + 4 * r, x + 2 * r, y + 5 * r, r); ctxBackground.lineTo(x + r, y + 5 * r); ctxBackground.arcTo(x, y + 5 * r, x, y + 4 * r, r); ctxBackground.lineTo(x, y + 3 * r); ctxBackground.arcTo(x + r, y + 3 * r, x + r, y + 2 * r, r); ctxBackground.arcTo(x + r, y + r, x, y + r, r); ctxBackground.lineTo(x, y); //先關(guān)閉繪制路徑。注意,此時(shí)將會(huì)使用直線連接當(dāng)前端點(diǎn)和起始端點(diǎn)。 ctxBackground.closePath(); ctxBackground.clip(); ctxBackground.stroke(); //畫(huà)線輪廓 wx.getImageInfo({ src: 'cloud://normal-env/000060.jpg', success: function (res) { ctxBackground.drawImage(res.path, 0, 0, 256, 191); ctxBackground.restore(); ctxBackground.draw(); } }) }
總結(jié)
以上所述是小編給大家介紹的微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
javascript字符串對(duì)象常用api函數(shù)小結(jié)(連接,替換,分割,轉(zhuǎn)換等)
這篇文章主要介紹了javascript字符串對(duì)象常用api函數(shù),結(jié)合實(shí)例形式總結(jié)分析了javascript常用的連接、替換、分割、轉(zhuǎn)換等相關(guān)函數(shù)與使用方法,需要的朋友可以參考下2016-09-09在IE下獲取object(ActiveX)的Param的代碼
在IE下,獲取Param的時(shí)候有個(gè)詭異現(xiàn)象(不知道算不算bug)。2009-09-09JavaScript中數(shù)組去重的辦法總結(jié)
你是否在面試的過(guò)程中被考到過(guò)給你一個(gè)數(shù)組讓你去掉重復(fù)項(xiàng)呢,下面小編就來(lái)總結(jié)一下對(duì)于數(shù)組去重這道簡(jiǎn)單的面試題時(shí),我們可以回答的方法有什么吧2023-06-06js中的異步獲取到的數(shù)據(jù)到底能不能賦值給一個(gè)全局變量問(wèn)題
這篇文章主要介紹了js中的異步獲取到的數(shù)據(jù)到底能不能賦值給一個(gè)全局變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04javascript簡(jiǎn)單實(shí)現(xiàn)等比例縮小圖片的方法
這篇文章主要介紹了javascript簡(jiǎn)單實(shí)現(xiàn)等比例縮小圖片的方法,涉及javascript針對(duì)頁(yè)面元素屬性的讀取、運(yùn)算及設(shè)置相關(guān)技巧,需要的朋友可以參考下2016-07-07