微信小程序实现的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实现弹窗插件功能实例代码分享
Dec 12 Javascript
从零学jquery之如何使用回调函数
May 16 Javascript
jQuery中 prop() attr()使用详解
May 19 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
Oct 30 Javascript
AngularJS实现页面定时刷新
Mar 14 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
vue-router传递参数的几种方式实例详解
Nov 13 Javascript
setTimeout与setInterval的区别浅析
Mar 23 Javascript
json数据格式常见操作示例
Jun 13 Javascript
jQuery zTree插件快速实现目录树
Aug 16 jQuery
小程序接入腾讯位置服务的详细流程
Mar 03 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 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 不错的学习资料
2009/02/06 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
angular 服务随记小结
2019/05/06 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
python 开发的三种运行模式详细介绍
2017/01/18 Python
Django权限机制实现代码详解
2018/02/05 Python
python 判断网络连通的实现方法
2018/04/22 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
班主任与学生安全责任书
2014/07/25 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js