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

首頁 > 開發 > 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: '保存成功'})

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清流县| 襄垣县| 武强县| 永和县| 泰和县| 杂多县| 象山县| 额尔古纳市| 和平县| 抚远县| 唐河县| 体育| 水富县| 静乐县| 晋城| 大竹县| 朔州市| 张掖市| 云梦县| 铁岭市| 措勤县| 睢宁县| 隆回县| 玉屏| 通河县| 黄石市| 临泉县| 安宁市| 霸州市| 哈尔滨市| 佛冈县| 梁平县| 宾阳县| 义马市| 泰州市| 玛曲县| 沂南县| 定安县| 任丘市| 弋阳县| 定日县|