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


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 相关文章推荐
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
Jan 22 Javascript
javascript 函数速查表
Feb 07 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
使用js判断控件是否获得焦点
Jan 03 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
Aug 31 Javascript
jQuery插件echarts去掉垂直网格线用法示例
Mar 03 Javascript
js获取元素的偏移量offset简单方法(必看)
Jul 05 Javascript
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
Vue通过URL传参如何控制全局console.log的开关详解
Dec 07 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
May 27 Javascript
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
微信小程序使用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
mysql总结之explain
2012/02/27 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
php支付宝APP支付功能
2020/07/29 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
12个超实用的JQuery代码片段
2015/11/02 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
angular多语言配置详解
2019/05/16 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
yy婚礼主持词
2014/03/14 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
幼儿园家长寄语
2014/04/02 职场文书
商场父亲节活动方案
2014/08/27 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技