微信小程序实现的canvas合成图片功能示例


Posted in Javascript onMay 03, 2019

本文实例讲述了微信小程序实现的canvas合成图片功能。分享给大家供大家参考,具体如下:

先要获取图片的信息  然后将需要合成的内容用canvas绘制出来,得到一个合成好的画布,接下来用 wx.canvasToTempFilePath 把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。这个时候的路径 是微信的临时路径,浏览器是访问不了的,因此需要请求服务器  用 wx.uploadFile 将本地资源上传到开发者服务器。

在页面的wxml中加入canvas组件如下:

<view class="canvasBox">
 <canvas canvas-id="shareCanvas" style="width:375px;height:300px"></canvas>
</view>

在js中

picture: function () { //生成图片
   let that = this;
   let p1 = new Promise(function (resolve, reject) {
    wx.getImageInfo({
     src: 图片路径,
     success(res) {
      resolve(res);
     }
    })
   }).then(res => {
    const ctx = wx.createCanvasContext('shareCanvas');
    ctx.drawImage(res.path, 0, 0, 375, 300);  //绘制背景图
    //ctx.setTextAlign('center')  // 文字居中
    ctx.setFillStyle('#000000') // 文字颜色:黑色
    ctx.setFontSize(20)     // 文字字号:22px
    ctx.fillText("文本内容", 20, 70) //开始绘制文本的 x/y 坐标位置(相对于画布) 
    ctx.stroke();//stroke() 方法会实际地绘制出通过 moveTo() 和 lineTo() 方法定义的路径。默认颜色是黑色
    ctx.draw(false, that.drawPicture());//draw()的回调函数 
    console.log(res.path);
   })
  },
  drawPicture: function () { //生成图片
    var that = this;
   setTimeout(function(){
    wx.canvasToTempFilePath({ //把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径
     x: 0,
     y: 0,
     width: 375,
     height: 300,
     destWidth: 750, //输出的图片的宽度(写成width的两倍,生成的图片则更清晰)
     destHeight: 600,
     canvasId: 'shareCanvas',
     success: function (res) {
      console.log(res);
      that.draw_uploadFile(res);
     },
    })
   },300)
  },
  draw_uploadFile: function (r) { //wx.uploadFile 将本地资源上传到开发者服务器
   let that = this;
   wx.uploadFile({
    url: 图片上传接口, //线上接口
    filePath: r.tempFilePath,
    name: 'imgFile',
    success: function (res) {
     console.log(res);
     if(res.statusCode==200){
      res.data = JSON.parse(res.data);
      let imgsrc = res.data.data.src;
      that.setData({
       imgPath: imgsrc
      });
     }else{
      console.log('失败')
     }
    },
   })
  },

注意:若是将此方法写成自定义组件,则 wx.createCanvasContextwx.canvasToTempFilePath 都需要多传一个this

微信小程序实现的canvas合成图片功能示例

因在自定义组件下,当前组件实例的this,用以操作组件内 <canvas/> 组件。

至于分享的话 ,拿到服务器返回的图片路径之后 就可以用来写分享的图片路径了

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
javascript淡入淡出效果的实现思路
Mar 31 Javascript
javascript常见操作汇总
Sep 03 Javascript
JS小游戏之极速快跑源码详解
Sep 25 Javascript
原生js实现日期联动
Jan 12 Javascript
很酷的星级评分系统原生JS实现
Aug 25 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
angular中不同的组件间传值与通信的方法
Nov 04 Javascript
vue组件实现进度条效果
Jun 06 Javascript
JavaScript创建对象的常用方式总结
Aug 10 Javascript
vue.js仿hover效果的实现方法示例
Jan 28 Javascript
inquirer.js一个用户与命令行交互的工具详解
May 18 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 #Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
May 02 #Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
May 02 #Javascript
详解微信小程序缓存--缓存时效性
May 02 #Javascript
详解如何使用router-link对象方式传递参数?
May 02 #Javascript
详解Vue底部导航栏组件
May 02 #Javascript
微信小程序搭建自己的Https服务器
May 02 #Javascript
You might like
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
css3中transition属性详解
2014/09/02 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
PHP如何自定义函数
2016/09/16 面试题
大学生应聘自荐信
2013/10/11 职场文书
工作分析计划书
2014/04/30 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
个人党性锻炼总结
2015/03/05 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书