麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > HTML5 > 正文

微信小程序“圣誕帽”的實現思路詳解

2024-09-05 07:22:16
字體:
來源:轉載
供稿:網友

這兩天朋友圈被“圣誕帽”刷屏,這個小程序連微信官方都出來辟謠了,又一個現象級的玩意兒。從產品角度而言無疑是非常成功,但從技術角度而言是確實習以為常,創意很重要!簡單說一下思路:獲取頭像,把頭像畫在Canvas里面,接著往Canvas里畫帽子,調整帽子的參數(位置、大小、旋轉),最后保存為圖片。

先來看看效果

 

思路

1.獲取用戶頭像

wx.getUserInfo({    success: function(res) {        var userInfo = res.userInfo        var avatarUrl = userInfo.avatarUrl  }})

這里有個問題需要注意,canvas不支持網絡圖片,上面獲取的只是頭像圖片地址,所以在這里要把圖片下載到微信的臨時目錄。代碼如下:

wx.downloadFile({       url: userInfo.avatarUrl,     success: function (res) {            if (res.statusCode === 200) {                  avatarUrl = res.tempFilePath //這里的地址是指向本地圖片         }         }  })

獲取頭像這一步用的是微信現成的API 比較方便。

2.繪制用戶頭像

此處封裝了常用的方法,下方avatarImg.w和avatarImg.h是指頭像的大小。

drawAvatar: function (img) {    ctx.drawImage(img, 0, 0, avatarImg.w, avatarImg.h)}

繪制圖片使用drawImage函數

3.繪制帽子

繪制帽子之前,我定義了一個對象object來保存帽子的參數

var hat = {     url: "../res/hat01.png",     w: 40,      h: 40,      x: 100,     y: 100,     b: 1,//縮放的倍率    rotate: 0//旋轉的角度}

接下來開始繪制帽子

drawHat: function (hat) {     ctx.translate(hat.x, hat.y)     ctx.scale(hat.b, hat.b)     ctx.rotate(hat.rotate * Math.PI / 180)     ctx.drawImage(hat.url, -hat.w / 2, -hat.h / 2, hat.w, hat.h) }

這里要稍微解釋下,是以帽子的中心點為原點進行縮放、旋轉

ctx.translate(hat.x, hat.y) //translate是將畫布的中心點移動到指定坐標處

此時的原點已經從(0,0)移動到(x,y),也就是帽子的中心點,帽子長的二分之一和寬的二分之一交匯處。

ctx.drawImage(hat.url, -hat.w / 2, -hat.h / 2, hat.w, hat.h)

畫帽子的關鍵是把x,y 移動到原點之外,示意圖如下:

 

4.改變帽子的參數

移動帽子:

moveHat: function (e) {      hat.x = e.touches[0].x     hat.y = e.touches[0].y      that.drawA()  }

旋轉帽子:

rotateHat: function (e) {       hat.rotate = e.detail.value    //這一塊偷懶了,用slider組件 ,滑動取值     that.drawA()  }

縮放帽子:

scaleHat: function (e) {       hat.b = e.detail.value        hat.w = 40 * hat.b         hat.h = 40 * hat.b         that.drawA()    ////此處用slider組件 ,滑動取值 }

改變帽子樣式:

changeHat: function (e) {    hat.url = e.currentTarget.dataset.url  //改變帽子的樣式       that.drawA() }

這幾個方法中都有drawA(),這主要是每一次移動、旋轉、縮放、改變參數時重繪畫布。

5.Canvas導出圖片

微信官方有提供相應API

saveToPhoto: function () {    wx.canvasToTempFilePath({          x: 0,        y: 0,        width: 240,        height: 240,        destWidth: 240,        destHeight: 240,        canvasId: 'ctx',        success: function (res) {            //canvas轉圖片成功回調        }    })}

最后保存到相冊

wx.saveImageToPhotosAlbum({    filePath: res.tempFilePath,}) wx.showToast({title: '保存成功'})

總結

以上所述是小編給大家介紹的微信小程序“圣誕帽”的實現思路,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产乱淫av片免费网站 | 99视频在线观看视频 | 国产精品自拍av | 国产羞羞视频在线观看 | 日产精品一区二区三区在线观看 | 免费国产在线观看 | 欧美一级免费视频 | 羞羞视频免费观看网站 | 日本最新免费二区三区 | 欧美成人精品一区二区三区 | 国产深夜福利视频在线播放 | 国产一区二区影视 | 久久精品女人天堂av | 一区二区免费网站 | 香蕉视频18 | 97青青草视频 | 亚洲免费永久 | 97青青草视频 | 亚洲第一综合色 | 天堂在线中文资源 | 久久久久久久久国产精品 | 密室逃脱第一季免费观看完整在线 | 国产成人强伦免费视频网站 | 日韩精品无码一区二区三区 | 小视频免费在线观看 | 成人精品一区二区三区中文字幕 | 国产自91精品一区二区 | 国产精品久久久久无码av | 亚洲免费观看视频 | 亚洲一区二区免费视频 | 少妇的肉体2无删减版 | 看国产精品 | 在线看国产视频 | 最近国产中文字幕 | 天天干导航 | 免费观看黄色片视频 | 在线看免费的a | 男男羞羞视频网站国产 | 国产色片 | 热久久成人| 国产精品视频成人 |