微信小程序实现的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 相关文章推荐
ext for eclipse插件安装方法
Apr 27 Javascript
jQuery学习3:操作元素属性和特性
Feb 07 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
Jan 15 Javascript
用客户端js实现带省略号的分页
Apr 27 Javascript
JS截取与分割字符串常用技巧总结
Nov 10 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
Jan 14 Javascript
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
使用watch监听路由变化和watch监听对象的实例
Feb 24 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 Javascript
使用React手写一个对话框或模态框的方法示例
Apr 25 Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 Javascript
深入了解JavaScript词法作用域
Jul 29 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 switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
结婚当天新郎保证书
2015/05/08 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
Windows server 2012搭建FTP服务器
2022/04/29 Servers