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

首頁 > 編程 > HTML > 正文

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

2024-08-26 00:20:14
字體:
來源:轉載
供稿:網友

這兩天朋友圈被“圣誕帽”刷屏,這個小程序連微信官方都出來辟謠了,又一個現象級的玩意兒。從產品角度而言無疑是非常成功,但從技術角度而言是確實習以為常,創意很重要!簡單說一下思路:獲取頭像,把頭像畫在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: '保存成功'})

總結

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品一区二区6 | 亚洲午夜免费电影 | 99视频有精品视频高清 | 九九热视频这里只有精品 | 亚洲三区精品 | 在线播放亚洲视频 | 日本欧美一区二区三区视频麻豆 | 欧美亚洲另类在线 | 欧美成人免费在线视频 | 久久国产精品99国产 | 日本不卡一区二区在线观看 | 一级做a爰性色毛片免费1 | 91精品免费观看 | 国产精品视频成人 | 精品中文视频 | 欧美精品一二三区 | 欧美成人精品一区 | 少妇色诱麻豆色哟哟 | 91精品国产九九九久久久亚洲 | xxxx hd video 69| 国产精品久久久久久久久久久久久久久久 | 激情视频在线播放 | 91丨九色丨国产在线观看 | 羞羞的视频免费在线观看 | 午色影院 | 亚洲特黄| av在线免费观看网 | 午夜天堂在线 | 午夜精品视频在线 | 国产资源在线观看视频 | 久草在线视频免费播放 | 特级毛片a级毛片100免费 | 一级黄色性感片 | 意大利av在线 | 免费久久精品 | 国产成人高清在线观看 | 久久精品1区2区 | 中文字幕精品在线播放 | 一区二区高清视频在线观看 | 国产精品视频在线观看免费 | 蜜桃传媒视频麻豆第一区免费观看 |