微信小程序实现的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 相关文章推荐
jQuery实现的原图对比窗帘效果
Jun 15 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
JS模式之单例模式基本用法
Jun 30 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
May 25 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 Javascript
js 计算月/周的第一天和最后一天代码
Feb 01 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
Apr 30 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笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
php简单判断文本编码的方法
2015/07/30 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
Javascript验证方法大全
2015/09/21 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
js 函数性能比较方法
2020/08/24 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
django如何连接已存在数据的数据库
2018/08/14 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
巴西购物网站:Onofre Agora
2020/06/08 全球购物
国贸专业个人求职信分享
2013/12/04 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
2014年环卫工作总结
2014/11/22 职场文书
优秀党员先进材料
2014/12/18 职场文书
检讨书怎么写
2015/01/23 职场文书
实习单位鉴定意见
2015/06/04 职场文书
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库