微信小程序实现的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 相关文章推荐
JS event使用方法详解
Apr 28 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
Apr 14 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
Nov 17 Javascript
Angular2 (RC4) 路由与导航详解
Sep 21 Javascript
JavaScript中const、var和let区别浅析
Oct 11 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 jQuery
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
vue实现循环滚动列表
Jun 30 Javascript
详解JavaScript 作用域
Jul 14 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
php语言流程控制中的主动与被动
2012/11/05 PHP
PHP写日志的实现方法
2014/11/05 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
详解Python IO口多路复用
2020/06/17 Python
汽车检测与维修专业求职信
2013/10/30 职场文书
大学生找工作推荐信范文
2013/11/28 职场文书
保护环境建议书
2014/03/12 职场文书
职业生涯规划书前言
2014/04/15 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
大学生实习介绍信
2015/05/05 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL