微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼
最近在研究拼圖驗(yàn)證碼實(shí)現(xiàn),需要對圖片的部分模塊進(jìn)行特殊形狀切割出一小塊,明白后原來是如此簡單,第一步就是將所有繪制的形狀用線勾出(直線、弧線、貝塞爾曲線都可以)形成閉環(huán),第二步就是切割繪制,第二步不麻煩,麻煩的只是第一步,需要一些計(jì)算,所以會在以后,盡力的多保存一些特殊形狀的方法。
比如:

代碼
drawPic(x,y,r){
// const ctxBackground = wx.createCanvasContext('canvasBackground')
const ctxBackground = wx.createCanvasContext('canvasBackground')
ctxBackground.save();
//開始一個(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í)將會使用直線連接當(dāng)前端點(diǎn)和起始端點(diǎn)。
ctxBackground.closePath();
ctxBackground.clip();
ctxBackground.stroke(); //畫線輪廓
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)代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
js下通過getList函數(shù)實(shí)現(xiàn)分頁效果的代碼
js下通過getList函數(shù)實(shí)現(xiàn)分頁效果的代碼,需要通過js分頁的朋友可以參考下。2010-09-09
JavaScript自定義日歷實(shí)現(xiàn)簽到功能
這篇文章主要為大家詳細(xì)介紹了JavaScript自定義日歷實(shí)現(xiàn)簽到功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
基于Web?Components實(shí)現(xiàn)一個(gè)日歷原生組件
這篇文章主要為大家詳細(xì)介紹了如何利用Web?Components實(shí)現(xiàn)一個(gè)簡單的日歷原生組件,文中的示例代碼講解詳細(xì),需要的小伙伴可以了解一下2023-07-07
bootstrap datetimepicker控件位置異常的解決方法
這篇文章主要為大家詳細(xì)介紹了bootstrap datetimepicker控件位置異常的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
網(wǎng)絡(luò)之美 JavaScript中Get和Set訪問器的實(shí)現(xiàn)代碼
前兩天IE9 Beta版發(fā)布了,對于從事Web開發(fā)的朋友們來說真是個(gè)好消息啊,希望將來有一天各個(gè)瀏覽器都能遵循統(tǒng)一的標(biāo)準(zhǔn)。今天要和大家分享的是JavaScript中的Get和Set訪問器,和C#中的訪問器非常相似。2010-09-09

