微信小程序使用canvas的画图操作示例


Posted in Javascript onJanuary 18, 2019

本文实例讲述了微信小程序使用canvas的画图操作。分享给大家供大家参考,具体如下:

基础写起来太没动力了,也写得乱七八糟的,还是直接解决一些小问题比较方便,代码的方方面面的细节都会详尽的解释一下。

1、下面介绍一下canvas的画图,我这个简单一点,画一个带图文的背景图,图片可以从后台获取也可以选择本地的。canvas画图首先要在wxml里面新建一个<canvas>标签,一定要写上canvas-id='canvas的id',这是必须条件,如下面代码:

<canvas canvas-id='canvas' style='width:{{windowW}}px;height:{{windowH}}px'></canvas>
<button bindtap='chooseImage'>相册</button>

2、上面canvas的宽高都是js控制的,使用?wx.getSystemInfo获取屏幕的可见宽高。代码如下:

wx.getSystemInfo({
   success: function (res) {
    that.setData({
     windowW: res.windowWidth,
     windowH: res.windowHeight
    })
   },
})

相当的详细,有没有!!!

3、重点注意一下:在微信小程序的canvas画图中如果使用了网络图片,一定要先把这张图片读取下载下来(可使用wx.downloadFile),存为网络格式的图片!!!

上面这个操作是避免网络状况不好的时候canvas画图完成了背景图片确显示不出来的情况,同时,这个图片所在的域名必须在微信公众平台配置一下,代码如下:

wx.downloadFile({
   url: '图片路径',
   success: function (res) {
    that.setData({
     canvasimgbg: res.tempFilePath
    })
   }
})

4、 我上面wxml代码里面写了一个按钮,使用wx.chooseImage调用了系统相册,所以说,我们选择一张图片画进canvas也是可以的,代码如下:

wx.chooseImage({
   success: function (res) {
    that.setData({
     chooseimg: res.tempFilePaths[0]
    })
   },
})

5、下面就是cancas画图啦,画和屏幕一样宽高的,然后我们再写一行字哈哈哈,代码如下:

var that = this;
var windowW = that.data.windowW;
var windowH = that.data.windowH;
var canvasimgbg = that.data.canvasimgbg;
var canvasimg1 = that.data.chooseimg;
canvas.drawImage(canvasimgbg, 0, 0, windowW, windowH);
canvas.drawImage(canvasimg1, 0, 10, 200, 200);
canvas.setFontSize(50)
canvas.fillText('Hello', 200, 200)
canvas.draw(true,setTimeout(function(){
   that.daochu()
},1000));

使用canvas.draw()画图,完毕之后直接wx.canvasToTempFilePath导出图片

6、导出图片,代码如下:

var that = this;
var windowW = that.data.windowW;
var windowH = that.data.windowH;
wx.canvasToTempFilePath({
   x: 0,
   y: 0,
   width: windowW,
   height: windowH,
   destWidth: windowW,
   destHeight: windowH,
   canvasId: 'canvas',
   success: function (res) {
    console.log(res)
    wx.saveImageToPhotosAlbum({
     filePath: res.tempFilePath,
     success(res) {
     }
    })
    wx.previewImage({
     urls: [res.tempFilePath],
    })
   }
})

上面这些代码已经完成啦!!!

主要就是各位使用的时候看需要什么样的啦!

下面还是附上完整的代码把!

// pages/canvas/canvas.js
Page({
 /**
  * 页面的初始数据
  */
 data: {
 },
 onLoad: function (options) {
  var that = this;
  that.sys();
  that.bginfo();
 },
 sys: function () {
  var that = this;
  wx.getSystemInfo({
   success: function (res) {
    that.setData({
     windowW: res.windowWidth,
     windowH: res.windowHeight
    })
   },
  })
 },
 bginfo: function () {
  var that = this;
  wx.downloadFile({
   url: '图片链接',//注意公众平台是否配置相应的域名
   success: function (res) {
    that.setData({
     canvasimgbg: res.tempFilePath
    })
   }
  })
 },
 canvasdraw: function (canvas) {
  var that = this;
  var windowW = that.data.windowW;
  var windowH = that.data.windowH;
  var canvasimgbg = that.data.canvasimgbg;
  var canvasimg1 = that.data.chooseimg;
  canvas.drawImage(canvasimgbg, 0, 0, windowW, windowH);
  canvas.drawImage(canvasimg1, 0, 10, 200, 200);
  canvas.setFontSize(50)
  canvas.fillText('Hello', 200, 200)
  canvas.draw(true,setTimeout(function(){
   that.daochu()
  },1000));
  // canvas.draw();
 },
 daochu: function () {
  console.log('a');
  var that = this;
  var windowW = that.data.windowW;
  var windowH = that.data.windowH;
  wx.canvasToTempFilePath({
   x: 0,
   y: 0,
   width: windowW,
   height: windowH,
   destWidth: windowW,
   destHeight: windowH,
   canvasId: 'canvas',
   success: function (res) {
    console.log(res)
    wx.saveImageToPhotosAlbum({
     filePath: res.tempFilePath,
     success(res) {
     }
    })
    wx.previewImage({
     urls: [res.tempFilePath],
    })
   }
  })
 },
 chooseImage: function () {
  var that = this;
  var canvas = wx.createCanvasContext('canvas');
  wx.chooseImage({
   success: function (res) {
    that.setData({
     chooseimg: res.tempFilePaths[0]
    })
    that.canvasdraw(canvas);
   },
  })
 }
})

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
javascript比较文档位置
Apr 08 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
js实现兼容IE和FF的上下层的移动
May 04 Javascript
javascript消除window.close()的提示窗口
May 20 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
深入浅析JavaScript函数前面的加号和叹号
Jul 09 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
Dec 08 Javascript
JavaScript cookie详解及简单实例应用
Dec 31 Javascript
jQuery Tree Multiselect使用详解
May 02 jQuery
JavaScript函数表达式详解及实例
May 05 Javascript
JS实现无缝循环marquee滚动效果
May 22 Javascript
jQuery解析json格式数据示例
Sep 01 jQuery
js中数组对象去重的两种方法
Jan 18 #Javascript
js根据需要计算数组中重复出现某个元素的个数
Jan 18 #Javascript
js中的reduce()函数讲解
Jan 18 #Javascript
微信小程序实现分享朋友圈的图片功能示例
Jan 18 #Javascript
vue-cli3 karma单元测试的实现
Jan 18 #Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 #Javascript
如何解决.vue文件url引用文件的问题
Jan 18 #Javascript
You might like
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
PDO::inTransaction讲解
2019/01/28 PHP
通过隐藏option实现select的联动效果
2009/11/10 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
Python查询IP地址归属完整代码
2017/06/21 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python贪吃蛇游戏代码
2020/04/18 Python
opencv与numpy的图像基本操作
2019/03/08 Python
实例详解Python模块decimal
2019/06/26 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
甜品店的创业计划书范文
2014/01/02 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
安全宣传标语
2014/06/10 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
求职自荐信怎么写
2015/03/04 职场文书
中秋节感想
2015/08/10 职场文书
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python