微信小程序绘制图片发送朋友圈


Posted in Javascript onJuly 25, 2019

本文实例为大家分享了微信小程序绘制图片发送朋友圈的具体代码,供大家参考,具体内容如下

这种生成图片的效果是很常见的,实现起来也不难,跟原生js的差不多。需要注意的就是canvas标签上不要加太多的css,后果呢就是导致canvas不显示,还有呢就是canvas组件的优先级是最高的,所以会覆盖掉下面的所有内容,解决方法呢就是使用:

微信小程序绘制图片发送朋友圈

使用上面这两个组件是可以盖在canvas上面的。

注意:canvas绘制不支持网络图片,需要将网络图片保存成本地图片

onLoad: function(options) {
    var grade = options.grade;
    this.setData({
      grade: grade
    })
    this.loading();
 
  },
  //检测,网络图片是否下载完成
  loading: function() {
    var _this = this;
    wx.showLoading({
      title: '生成中...',
    })
    timer = setInterval(function() {
      var avatarUrl = _this.data.avatarUrl;
      var qc_code = _this.data.qc_code;
      if (avatarUrl != null && qc_code != null) {
        wx.hideLoading();
        clearInterval(timer);
        _this.draw();
      }
    }, 500)
  },
  //保存到相册
  saveImage: function() {
    var imagePath = this.data.imagePath;
    wx.saveImageToPhotosAlbum({
      filePath: imagePath,
      success: function(res) {
        console.log(res)
      },
      fail: function(res) {
        console.log(res)
      }
    })
 
  },
  //将用户头像下载为本地路径
  downImage: function(img) {
    var _this = this;
    wx.getImageInfo({
      src: img,
      success: function(res) {
        console.log(res.path)
        _this.setData({
          avatarUrl: res.path
        })
 
      }
    })
  },
  //下载小程序二维码
  downImage2: function (img) {
    var _this = this;
    wx.getImageInfo({
      src: img,
      success: function (res) {
        console.log(res.path)
        _this.setData({
          qc_code: res.path
        })
 
      }
    })
  },
  //生成canvas图片
  draw: function() {
    var _this = this;
    var context = wx.createCanvasContext('firstCanvas');
    var userInfo = wx.getStorageSync('userInfo');
    var award ;
    // 性别
    var gender = userInfo.gender;
    //背景图片
    var bg = '../../images/icon-cj.png';
    //得分
    var grade = 0 ^ _this.data.grade;
    var width;
    var height;
    if (grade >= 0 && grade <= 30) {
      if(gender == 2){
        award = '../../images/zbzxlp.png';
      }else{
        award = '../../images/zbzxlg.png';
      }
    }else if(grade >= 31 && grade <= 60){
      if (gender == 2) {
        award = '../../images/zklp.png';
      } else {
        award = '../../images/zklg.png';
      }
    } else if (grade >= 61 && grade <= 80){
      if (gender == 2) {
        award = '../../images/zmlp.png';
      } else {
        award = '../../images/whlg.png';
      }
    }else{
      if (gender == 2) {
        award = '../../images/wmlp.png';
      } else {
        award = '../../images/wmlg.png';
      }
    }  
    if (award == '../../images/zbzxlp.png' || award == '../../images/zbzxlg.png'){
      width = 156;
      height= 25;
    }else{
      width = 103;
      height = 25;
    }  
    //二维码
    var qc_code = _this.data.qc_code;
    // 用户头像
    var avatarUrl = _this.data.avatarUrl;
    //获取设备的基本信息
    wx.getSystemInfo({
      success: function(res) {
        //绘制背景图
        context.drawImage(bg, 0, 0, 350, 468);
        // 绘制奖项
        context.drawImage(award,180 - (width / 2),212 - (height / 2),width,height);
        //绘制二维码
        context.drawImage(qc_code, 175 - (92 / 2), 385 - (108 / 2), 92, 107);
        //绘制得分
        context.setFontSize(28); //字体大小
        context.fillStyle = '#4fc089';
        context.setTextAlign('center')
        context.fillText(grade, 177, 48)
        // 绘制姓名
        context.setFontSize(16);
        context.fillStyle = '#000000';
        context.setTextAlign('center')
        context.fillText(userInfo.nickName, 167, 180);
        // 绘制头像
        context.drawImage(avatarUrl, 72, 157, 33, 33);
 
        context.draw(false, function() {
          setTimeout(function() {
            wx.canvasToTempFilePath({
              width: 350,
              height: 468,
              destWidth: 700,
              destHeight: 936,
              canvasId: 'firstCanvas',
              success: function(res) {
                var tempFilePath = res.tempFilePath;
                console.log("图片"+tempFilePath);
                _this.setData({
                  imagePath: tempFilePath,
                  isCanvas: true
                });
                _this.upload(tempFilePath);
 
              },
              fail: function(res) {
                console.log(res);
              }
            });
          }, 1000);
        });
      },
    })
  },

因为我的项目需要,我上面做个很多判断,那些东西不需要管,重点就是,绘制图片drawimage方法 和绘制文字的方法,我的绘制方法是让他们根据canvas上的一个坐标点居中绘制的,这个可以看一下。

还有就是,生成图片的尺寸要比画的尺寸大一倍,这样图片不会失真,比较清楚,也就是这个方法:

wx.canvasToTempFilePath() 前两个参数是canvas的大小,然后是生成图片的大小,canvas的ID

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript select下拉框操作常用方法
Nov 09 Javascript
jQuery DOM操作小结与实例
Jan 07 Javascript
关于 文本框默认值 的操作js代码
Jan 12 Javascript
jquery JSON的解析方式示例介绍
Jul 27 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
js获取微信版本号的方法
May 12 Javascript
JavaScript设计模式经典之命令模式
Feb 24 Javascript
jQuery实现打开页面渐现效果示例
Jul 27 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
vue实现个人信息查看和密码修改功能
May 06 Javascript
JavaScript继承定义与用法实践分析
May 28 Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 #Javascript
微信小程序实现动态列表项的顺序加载动画
Jul 25 #Javascript
JS查找孩子节点简单示例
Jul 25 #Javascript
微信小程序自定义单项选择器样式
Jul 25 #Javascript
vue实现多组关键词对应高亮显示功能
Jul 25 #Javascript
微信小程序实现原生步骤条
Jul 25 #Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 #Javascript
You might like
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Python闭包实现计数器的方法
2015/05/05 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
python圣诞树编写实例详解
2020/02/13 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
人事部经理岗位职责
2014/03/07 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
庆六一开幕词
2015/01/29 职场文书
继续教育个人总结
2015/03/03 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python