微信小程序实现的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 CSS修改学习第二章 样式
Feb 19 Javascript
读jQuery之四(优雅的迭代)
Jun 20 Javascript
鼠标放在图片上显示大图的JS代码
Mar 26 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
Nov 26 Javascript
Node.js中的事件驱动编程详解
Aug 16 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
超实用的JavaScript表单代码段
Feb 26 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
vue脚手架搭建过程图解
Jun 06 Javascript
vue-router跳转时打开新页面的两种方法
Jul 29 Javascript
如何通过JS实现转码与解码
Feb 21 Javascript
JavaScript实时更新当前的时间的示例代码
Jul 15 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
mac下安装nginx和php
2013/11/04 PHP
php生成随机数的三种方法
2014/09/10 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
asp批量修改记录的代码
2008/06/25 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
javascript闭包的理解
2015/04/01 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
关于Django外键赋值问题详解
2017/08/13 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
Python pymongo模块用法示例
2018/03/31 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
wxPython实现列表增删改查功能
2019/11/19 Python
举例讲解Python装饰器
2020/12/24 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
美国智能家居专家:tink
2019/06/04 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
初二物理教学反思
2014/01/29 职场文书
入党申请自荐书范文
2014/02/11 职场文书
自我鉴定标准格式
2014/03/19 职场文书
文明班级建设方案
2014/05/15 职场文书
个人收入证明模板
2014/09/18 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书