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


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 控制弹出窗口
Apr 10 Javascript
javascript 数组排序函数
Aug 20 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 Javascript
常用原生js自定义函数总结
Nov 20 Javascript
layui前段框架日期控件使用方法详解
May 19 Javascript
移动端效果之Swiper详解
Oct 09 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
Apr 17 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
Jun 14 Javascript
axios如何取消重复无用的请求详解
Dec 15 Javascript
通过实例解析javascript Date对象属性及方法
Nov 04 Javascript
js正则匹配markdown里的图片标签的实现
Mar 24 Javascript
使用 JavaScript 制作页面效果
Apr 21 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
PHP IPV6正则表达式验证代码
2010/02/16 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
显示、隐藏密码
2006/07/01 Javascript
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Vue程序调试的方法
2019/06/17 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python支持多线程的爬虫实例
2019/12/21 Python
Python文件操作方法详解
2020/02/09 Python
python实现简单学生信息管理系统
2020/04/09 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
销售冠军获奖感言
2014/02/03 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
重阳节活动总结
2014/08/27 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
教师年度个人总结
2015/02/11 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL