微信小程序实现的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 新浪背投广告实现代码
Jul 07 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
Apr 26 Javascript
JS和函数式语言的三特性
Mar 05 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
深入理解js promise chain
May 05 Javascript
Javascript中click与blur事件的顺序详析
Apr 25 Javascript
ES5 ES6中Array对象去除重复项的方法总结
Apr 27 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
微信小程序 input输入及动态设置按钮的实现
Oct 27 Javascript
Angular6 Filter实现页面搜索的示例代码
Dec 02 Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 Javascript
快速解决element的autofocus失效问题
Sep 08 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获取http请求的头信息实现步骤
2012/12/16 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
python简单文本处理的方法
2015/07/10 Python
python 将md5转为16字节的方法
2018/05/29 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
美国著名的团购网站:Woot
2016/08/02 全球购物
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
体育教育个人自荐信范文
2013/12/01 职场文书
面试后感谢信
2014/02/01 职场文书
网页美工求职信
2014/02/15 职场文书
公司门卫工作职责
2014/06/28 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
企业法人任命书
2015/09/21 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
django学习之ajax post传参的2种格式实例
2021/05/14 Python