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


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 学习技巧
Feb 17 Javascript
JavaScript打字小游戏代码
Dec 26 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
Jan 20 Javascript
js 3秒后跳转页面的实现代码
Mar 10 Javascript
浅析Node.js查找字符串功能
Sep 03 Javascript
javascript删除一个html元素节点的方法
Dec 20 Javascript
jQuery 3.0十大新特性最终版发布
Jul 14 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
Aug 27 Javascript
工作中常用到的ES6语法
Sep 04 Javascript
webpack4.x CommonJS模块化浅析
Nov 09 Javascript
JavaScript计算正方形面积
Nov 26 Javascript
纯js实现无缝滚动功能代码实例
Feb 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
虫族 ZERG 概述
2020/03/14 星际争霸
珊瑚虫IP库浅析
2007/02/15 PHP
php下通过POST还是GET来传值
2008/06/05 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
javascript cookies操作集合
2010/04/12 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
js实现圆盘记速表
2015/08/03 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
基于jQuery实现可编辑的表格
2019/12/11 jQuery
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
总结Python编程中三条常用的技巧
2015/05/11 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
python中spy++的使用超详细教程
2021/01/29 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
师范生的个人求职信范文
2014/01/04 职场文书
运动会加油稿20字
2014/11/15 职场文书
小学生毕业评语
2014/12/26 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
Redis 常见使用场景
2021/08/30 Redis