微信小程序实现的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怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
Sep 24 Javascript
微信小程序获取微信运动步数的实例代码
Jul 20 Javascript
给vue项目添加ESLint的详细步骤
Sep 29 Javascript
详解如何让Express支持async/await
Oct 09 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
Apr 17 Javascript
vue图片加载失败时用默认图片替换的方法
Aug 29 Javascript
Vue学习之组件用法实例详解
Jan 06 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
Oct 28 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+javascript模拟Matrix画面
2006/10/09 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
jquery创建div 实现代码
2009/04/27 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
python在不同层级目录import模块的方法
2016/01/31 Python
python os.path模块常用方法实例详解
2018/09/16 Python
python学生管理系统开发
2019/01/30 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
python实现图片中文字分割效果
2019/07/22 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
python中time、datetime模块的使用
2020/12/14 Python
如何写出高性能的JSP和Servlet
2013/01/22 面试题
工商管理实习生自我鉴定范文
2013/12/18 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
工作经历证明范本
2015/06/15 职场文书
电工生产实习心得体会
2016/01/22 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL