微信小程序实现的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 相关文章推荐
Jqyery中同等与js中windows.onload的应用
May 10 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
纯JS实现动态时间显示代码
Feb 08 Javascript
AngularJS中watch监听用法分析
Nov 04 Javascript
JS实现购物车特效
Feb 02 Javascript
jQuery实现用户输入自动完成功能
Feb 13 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
Nov 02 Javascript
vue 标签属性数据绑定和拼接的实现方法
May 17 Javascript
详解redux异步操作实践
Aug 15 Javascript
Angular设置别名alias的方法
Nov 08 Javascript
微信小程序实现日历效果
Dec 28 Javascript
详解javascript中的Error对象
Apr 25 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 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php比较相似字符串的方法
2015/06/05 PHP
php数组随机排序实现方法
2015/06/13 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
实用自动化运维Python脚本分享
2018/06/04 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
关于Python解包知识点总结
2020/05/05 Python
Python通过文本和图片生成词云图
2020/05/21 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
一文搞懂php的垃圾回收机制
2021/06/18 PHP
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
Java实现给Word文件添加文字水印
2022/02/15 Java/Android