微信小程序> 微信小程序canvas绘制圆形的头像

微信小程序canvas绘制圆形的头像

浏览量:1716 时间: 来源:zzzsmm
  • 由于微信的头像都是正方形的,现在想在canvas上绘制出一个圆形的头像然后保存到本地,方法是在头像外围加一个圆形的容器,然后把头像放进容器里面,代码如下:
var avatorWidth = unit * 64    , avatorHeight = unit * 64;var avatarurlX = unit * 25;   //绘制的头像在画布上的位置var avatarurlY = unit * 25;   //绘制的头像在画布上的位置context.save();context.beginPath(); //开始绘制context.arc(avatorWidth / 2 + avatarurlX, avatorHeight / 2 + avatarurlY, avatorWidth / 2, 0, Math.PI * 2, false);context.clip();context.drawImage(that.data.shareAvatarPath, unit * 25, unit * 25, avatorWidth, avatorWidth);context.restore();
  • 生成的海报如下小程序
  • js源码:
savePosterToLocal:function(){    wx.request({      url: app.globalData.requestUrl + '/api/statics/statics',      method:"get",      data:{        topic:"poster_save_click"      },      success:function(){        console.log("success");      }    })    //this.posterAnimate(100,1);    wx.showLoading({      title: '保存中...',    })    var that = this;    var context = wx.createCanvasContext('share-poster');    var unit = that.data.screenWidth / 375;    var pathBg = that.data.shareBg; //背景图片    var pathProgramCode = that.data.shareProgramCode;    var pathAvatar = that.data.shareAvatarPath; //用户头像    console.log(unit);    var pathNickName = app.globalData.userInfo.nickName;  //用户昵称    var shareTitle = "我已完成第"+that.data.totalDaysToNow+"天的学习";  //分享标题    var shareDescTop = that.data.topic   //描述    context.drawImage(pathBg, 0, 0, unit * 375, unit * 554);    context.drawImage(pathProgramCode, unit * 250, unit * 430, unit * 100, unit * 100);    var avatorWidth = unit * 64      , avatorHeight = unit * 64;    var avatarurlX = unit * 25;   //绘制的头像在画布上的位置    var avatarurlY = unit * 25;   //绘制的头像在画布上的位置    context.save();    context.beginPath(); //开始绘制    context.arc(avatorWidth / 2 + avatarurlX, avatorHeight / 2 + avatarurlY, avatorWidth / 2, 0, Math.PI * 2, false);    context.clip();    context.drawImage(that.data.shareAvatarPath, unit * 25, unit * 25, avatorWidth, avatorWidth);    context.restore();    context.setFontSize(18);    context.setFillStyle("#2a5acd");    context.fillText(pathNickName, unit * 98, unit * 48);    context.fillText(shareTitle, unit * 98, unit * 70);    context.setFontSize(22);    context.setFillStyle("#D26383");    context.setLineWidth(20);    context.fillText(shareDescTop, unit * 25, unit * 140)    // context.fillText(shareDescBottom, unit * 25, unit * 170)    context.draw(false, function () {      wx.canvasToTempFilePath({        x: 0,        y: 0,        width: unit * 375,        height: unit * 554,        destWidth: unit * 375 * 3,  //*2是为了让图片分辨率更大,显得更清晰        destHeight: unit * 554 * 3,        canvasId: 'share-poster',        success: function (res) {          that.setData({            shareImgPath: res.tempFilePath          })          if (!res.tempFilePath) {            wx.showModal({              title: '提示',              content: '图片绘制中,请稍后重试',              showCancel: false            })          }          console.log(that.data.shareImgPath)          wx.saveImageToPhotosAlbum({            filePath: res.tempFilePath,            success: (res) => {              console.log(res)              wx.hideLoading()              that.posterAnimate(100, 1);              wx.showModal({                title: '提示',                content: '保存成功,去分享吧',                showCancel:false,                success(res) {                  if (res.confirm) {                    console.log('用户点击确定')                  }                 }              })            },            fail: (err) => {              console.log(err)              wx.hideLoading()              that.posterAnimate(100, 1);            }          })        }      })    });  },
  • 对于图片需要注意的是,如果是网络资源,需要先把图片下载到临时路径才能使用,调用wx.downloadFile方法,然后绘制的图片路径使用该方法返回的路径(文件的下载域名需要在微信的后台配置一下):
wx.downloadFile({      url: app.globalData.userInfo.avatarUrl,      success: function (res) {        that.setData({          shareAvatarPath: res.tempFilePath        })        console.log(res.tempFilePath);      } })
  • 对于分辨率问题:可以更改wx.canvasToTempFilePath中的destWidth和dest Height属性,这两个属性就是用于改变保存到本地的图片大小,适当增大它们的值可以很好的提高清晰度
  • 总结:微信小程序的canvasAPI还是特别好用的,这我也只是刚刚接触,而且时间比较紧,所以代码方面没有怎么优化过,后续会继续学习优化。

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎