中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么實現虎年頭像框制作小程序

發布時間:2022-01-19 10:35:32 來源:億速云 閱讀:170 作者:iii 欄目:移動開發

本文小編為大家詳細介紹“Android怎么實現虎年頭像框制作小程序”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Android怎么實現虎年頭像框制作小程序”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1、實現原理

通過效果圖可以看到,在這個地方用到了兩張圖片:

一張是通過“獲取頭像”按鈕獲取的微信用戶的頭像,用作底圖;

另外一張是相框圖片,這是預制的靜態資源;

在點擊“保存頭像”的時候,將上面兩張圖片分別通過canvas畫到畫板上,先畫底圖,在畫相框圖,繪制完成后將畫板上的圖片保存到本地就完事了。

下面開始介紹具體的實現步驟。

2、收集靜態資源

在我這個小程序中內置了一些靜態資源,比如:頭像框圖片、首頁背景圖片、底部導航欄圖標等。

3、編碼

分為三個部分介紹編碼這個階段。

3.1 獲取微信用戶頭像

微信小程序提供有api獲取微信用戶信息。 wx.getUserProfile(Object object)

通過button按鈕點擊,獲取微信用戶信息:

<button bindtap="getUserProfile" class="btn1">獲取頭像</button>

getUserProfile實現如下:

    // 推薦使用wx.getUserProfile獲取用戶信息,開發者每次通過該接口獲取用戶個人信息均需用戶確認
    getUserProfile(e) {
      let that = this;
      wx.getUserProfile({
          desc: '僅用于生成頭像使用', // 聲明獲取用戶個人信息后的用途,后續會展示在彈窗中,請謹慎填寫
          success: (res) => {
            //獲取高清用戶頭像
            let url = res.userInfo.avatarUrl;
            while (!isNaN(parseInt(url.substring(url.length - 1, url.length)))) {
              url = url.substring(0, url.length - 1)
            }
            url = url.substring(0, url.length - 1) + "/0";
            res.userInfo.avatarUrl = url;
            that.setData({
              userInfo: res.userInfo,
              hasUserInfo: true
            })
          }
        });
    },

到這里獲取微信用戶頭像已經完成。

備注: 通過res.userInfo默認返回來的用戶頭像是低分辨率的,要獲取用戶頭像高清圖需要進行處理。

3.2 繪制圖像

繪制圖主要用到了微信小程序提供畫布相關API

變量說明:

hotArr:[{name:'虎年相框',key:'hunian'},{name:'虎頭帽子',key:'shendan'},{name:'國旗',key:'guoqing'}],

curHot:用于存放當前選擇的hotArr的索引。

windowWidth:  wx.getSystemInfoSync().windowWidth

size: 260; //自定義的大小

pc : wx.createCanvasContext('myCanvas');

drawImg(){
      wx.showLoading({
        title: '生成頭像中...',
      })
      let that = this;
      let type = this.data.hotArr[this.data.curHot].key;
      let promise1 = new Promise(function(resolve, reject) {
        wx.getImageInfo({
          src: that.data.userInfo.avatarUrl,
          success: function(res) {
            resolve(res);
          }
        })
      });
      var index = that.data.defaultImg;
      let promise2 = new Promise(function(resolve, reject) {
        wx.getImageInfo({
          src: `../../images/${type}/hat${index}.png`,
          success: function(res) {
            resolve(res);
          }
        })
      });
      Promise.all([
        promise1, promise2
      ]).then(res => {
        //主要就是計算好各個圖文的位置
        pc.clearRect(0, 0, windowWidth, size);
        //繪制背景圖
        pc.drawImage(res[0].path, windowWidth/2-130, 0, size, size)
        //繪制相框圖
        pc.drawImage('../../' + res[1].path, windowWidth/2-130, 0, size, size)
        pc.stroke()
        pc.draw(false, () => {
            //圖片繪制成功回調,調用保存canvas方法
            this.canvasToTempFile();
        })
      })
    },

wx.getImageInfo() 主要用于獲取圖片的信息,返回圖片的本地路徑;

這個地方主要是因為drawImage() 只支持繪制本地圖片。

3.3 保存圖像

在上一步我們已經將兩張圖片繪制到畫布上面了,下面將畫布上的內容保存到本地。

保存畫布上的內容到本地相冊也分為兩步。

第一步:把當前畫布指定區域的內容導出生成指定大小的圖片。

通過使用 wx.canvasToTempFilePath()

第二步:將保存圖片本地相冊。

通過使用 wx.saveImageToPhotosAlbum(https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.saveImageToPhotosAlbum.html)

 canvasToTempFile(){
    wx.canvasToTempFilePath({
      x: windowWidth/2-130,  //這個地方減去130是因為我們的圖片尺寸設置的是260
      y: 0,
      height: size,
      width: size,
      canvasId: 'myCanvas',
      success: (res) => {
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: result => {
            wx.hideLoading();
            wx.showModal({
              content: '圖片已保存到相冊,請前往微信去設置喲!',
              showCancel: false,
              success: function(res) {
                if (res.confirm) {
                  console.log('用戶點擊確定');
                }
              }
            })
          }, fail(e) {
            wx.hideLoading();
            console.log("err:" + e);
          }
        })
      }
    });
  },

到這里也就實現了基本的頭像框功能。

讀到這里,這篇“Android怎么實現虎年頭像框制作小程序”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九龙县| 高要市| 苏尼特左旗| 梁山县| 上栗县| 乌审旗| 察雅县| 凤山县| 舒城县| 蒲江县| 平山县| 平顶山市| 尚义县| 渑池县| 桂东县| 西吉县| 嘉定区| 漳浦县| 金乡县| 长春市| 临朐县| 伊川县| 广丰县| 新野县| 宁德市| 如东县| 陵水| 广河县| 麻栗坡县| 上思县| 沛县| 呼和浩特市| 迁西县| 荔波县| 光泽县| 隆德县| 清新县| 兴隆县| 唐河县| 同德县| 漠河县|