微信小程序-使用canvas生成含有微信头像的图片并分享

news/2024/7/7 10:22:26

我们的需求是动态生成一个含有微信头像的图片作为分享图片。

我们在页面中添加cancas

<view style='position:absolute;left:400rpx;'><canvas  canvas-id='ttcanvas' style='height:240px;width:320px;position:absolute;left:400rpx;'>
   <!-- <view class='colorpic'>
      <view class='pictit'><image src='{{scanConfig.userInfo.avatar}}'></image></view>
      <view class='picblock'><image src='../images/ttshare.png'></image><text>{{gameConfig.myScore}}</text></view>
      <view  class='pictext'><image src='../images/qiubai.png'></image></view>
    </view>   -->

    首先我我第一步想的是我在canvas里面写标签,添加进去,我就可以OK了!(我是个小白,程序小白),事实上!不可能的!!canvas导出图片怎么可能支持你在里面写标签,标签的东西完全不在画布里面好嘛!

    好吧,接下来我开始了手动画canvas之路。

var contex = wx.createCanvasContext('ttcanvas');//ttcanvas为该canvas的ID
      //var contex = ctx.getContext('2d');
      var avatarurl_width = 300;//这个是画布宽
      var avatarurl_heigth = 240;//这个是高
      var avatarurl_x = 50;
      var avatarurl_y = 50;
      // contex.arc(avatarurl_width / 2 + avatarurl_x, avatarurl_heigth / 2 + avatarurl_y, avatarurl_width / 2, 0, Math.PI * 2, false);//这个地方我画了个头像的圆
      // contex.clip();
      contex.drawImage('../images/share.jpg', 0, 0, avatarurl_width, avatarurl_heigth); // 这个是我的背景图片,本地的!
      contex.restore();
      contex.save();
      contex.beginPath(); //开始绘制
      contex.arc(150, 50, 30, 0, Math.PI * 2, false);
      contex.clip();
      //contex.arc(25, 25, 25, Math.PI * 2, false);
      //contex.clip();
      contex.drawImage(self.data.locolurl, 120, 20, 60, 60);
      contex.restore();
      contex.setFontSize(20)
      contex.fillStyle = "#fff";
      contex.fillText(self.data.gameConfig.myScore, 130, 132)
      contex.restore();
      contex.draw(true, setTimeout(function () {
        wx.canvasToTempFilePath({//导出图片
          width: 300,
          height: 240,
          destWidth: 300,
          destHeight: 240,
          canvasId: 'ttcanvas',
          success: res => {
            console.log(res.tempFilePath)
            self.data.shareurl = res.tempFilePath;
            self.setData(self.data);
          }
        },this)
      }, 100))

好了,通过以上代码我成功绘制了一个含有头像的canvas,并导出图片到了默认路径,也就是上述路径的shareurl里面!

onShareAppMessage: function () {
    var self=this;
    return{
      title: '抬头',
      desc: '分享描述',
      path: '分享后的打开路径',
      imageUrl:self.data.shareurl,
      success:function(res){
        console.log(res)
      }
    }
  },

好啦!接下来我们点击分享就OK了吧!

 

你以为好了么!

太天真的,你会发现模拟器OK了,真机完全加载不出来头像的好嘛!!!

好吧,没有办法 我就开始了踩坑之路,到底怎么办才能动态生成还有微信头像的图片,还可以让真机可以显示呢!

第一步,你需要把微信头像下载到本地路径,这个下载的时候有一个坑请注意,你下载头像的时候会产生这样一个问题

你会发现,你没办法下载下来,主要是因为微信小程序对于你下载的地址有规定。

首先你需要登录https://mp.weixin.qq.com,没错账号密码就是你小程序绑定的邮箱号和密码

然后选择最下面的设置downloadFile合法域名,把微信头像的下载链接添加到下面就可以了

第二步,下载这个图片,代码如下

wx.downloadFile({
      url:'你头像的网络地址',
      success: res => {
        // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
        if (res.statusCode === 200) {
          this.setData({
            locolurl: res.tempFilePath//将下载下来的地址给data中的变量变量
          });
        }
      }, fail: res => {
        console.log(res);
      }
    });

 

第三部调用这个本地地址,看得仔细的小伙伴可以看得出来我的第一段代码中的手绘canvas中已经引入了该本地路径地址了。

好了,这样功能就可以实现了!

最后一点提醒!!!

canvas默认是最高层级在页面最前面,当你把canvas设置为不显示的时候是不能导出图片的,我的做法是直接绝对定位扔屏幕外面了,简单粗暴!


http://www.niftyadmin.cn/n/2132473.html

相关文章

自适应螺旋飞行麻雀搜索算法

文章目录一、理论基础1、麻雀搜索算法2、自适应螺旋飞行麻雀搜索算法&#xff08;1&#xff09;基于随机变量的Tent混沌映射&#xff08;2&#xff09;自适应权重&#xff08;3&#xff09;莱维飞行机制&#xff08;4&#xff09;可变螺旋搜索策略&#xff08;5&#xff09;改进…

MySQL 4种事务的隔离级别

2019独角兽企业重金招聘Python工程师标准>>> 事务的ACID&#xff1a; 1)原子性(Atomic)&#xff1a;事务中各项操作&#xff0c;要么全做要么全不做&#xff0c;任何一项操作的失败都会导致整个事务的失败&#xff1b; 2)一致性(Consistent)&#xff1a;事务结束后系…

基于随机无迹sigma点变异策略的改进哈里斯鹰优化算法

文章目录一、理论基础1、哈里斯鹰优化算法2、改进的哈里斯鹰优化算法&#xff08;1&#xff09;反向学习策略&#xff08;2&#xff09;非线性收敛因子调整策略&#xff08;3&#xff09;随机无迹sigma点变异策略&#xff08;4&#xff09;IHHO算法流程图二、仿真实验与结果分析…

GO语言学习笔记(三) - 递归查找目录及子目录下的文件

GO语言学习笔记&#xff08;三&#xff09; - 递归查找目录及子目录下的文件 递归查找目录及子目录下的文件递归查找文件夹及子文件夹下的文件 代码 package mainimport ("fmt""io/ioutil""os""strings" )// 查找目录及子目录下的文件…

一种基于金鹰优化和灰狼优化的混合算法

文章目录一、理论基础1、金鹰优化算法2、灰狼优化算法3、提出的混合算法3.1 个体示例学习GEO(PELGEO)3.2 差分变异的简化GWO(DMSGWO)3.2.1 差分变异策略3.2.2 简化策略3.2.3 混合差异变异策略和简化策略3.3 自适应混合策略二、仿真实验与结果分析三、参考文献一、理论基础 1、…

算术优化与阿奎拉鹰优化的混合算法

文章目录一、理论基础1、阿奎拉鹰优化算法2、算术优化算法3、AO与AOA的混合(AOAAO)&#xff08;1&#xff09;改进逃逸能量参数&#xff08;2&#xff09;AOAAO算法伪代码二、仿真实验与结果分析三、参考文献一、理论基础 1、阿奎拉鹰优化算法 请参考这里。 2、算术优化算法…

酒瓶换酒

""" 一开始有5瓶啤酒 两个空酒瓶换一瓶啤酒 四个瓶盖换一瓶啤酒 问你最后能够喝到多少瓶啤酒 """def get(n):bottle, head n, ndrink 0while 1:drink bottleuse bottle // 2 head // 4if use 0:breakbottle % 2head % 4bottle usehead u…

基于随机无迹σ变异的改进HHO算法

文章目录一、理论基础1、哈里斯鹰优化算法HHO2、改进哈里斯鹰优化算法OSHHO&#xff08;1&#xff09;伪对立和伪反射学习机制&#xff08;2&#xff09;随机无迹点变异机制&#xff08;3&#xff09;能量因子非线性调整机制&#xff08;4&#xff09;OSHHO算法执行流程二、仿真…