微信小程序实现的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中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
Oct 12 Javascript
js滚动条回到顶部的代码
Dec 06 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
在AngularJS中使用AJAX的方法
Jun 17 Javascript
JavaScript中闭包之浅析解读(必看篇)
Aug 25 Javascript
深入学习js瀑布流布局
Oct 14 Javascript
利用ES6语法重构React组件详解
Mar 02 Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 Javascript
对于input 框限定输入值为浮点型的js代码
Sep 25 Javascript
原生js实现html手机端城市列表索引选择城市
Jun 24 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
Aug 20 Javascript
仿照Element-ui实现一个简易的$message方法
Sep 14 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的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP编写简单的App接口
2016/08/28 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
webpack 代码分离优化快速指北
2019/05/18 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
python系列 文件操作的代码
2019/10/06 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
如何理解python对象
2020/06/21 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
客服专员岗位职责范本
2013/11/29 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
社区两委对照检查材料
2014/08/23 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
文明旅游倡议书
2015/04/28 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
Vue Element plus使用方法梳理
2022/12/24 Vue.js