微信小程序使用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 相关文章推荐
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
JavaScript中函数(Function)的apply与call理解
Jul 08 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
怎么引入(调用)一个JS文件
May 26 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
Jun 21 Javascript
jQuery事件对象总结
Oct 17 Javascript
基于node.js依赖express解析post请求四种数据格式
Feb 13 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
vue 2.0路由之路由嵌套示例详解
May 08 Javascript
vue快捷键与基础指令详解
Jun 01 Javascript
Javascript 严格模式use strict详解
Sep 16 Javascript
在React 组件中使用Echarts的示例代码
Nov 08 Javascript
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
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
tensorflow 环境变量设置方式
2020/02/06 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
数控专业应届生求职信
2013/11/27 职场文书
消防安全汇报材料
2014/02/08 职场文书
财务工作失职检讨书
2014/11/21 职场文书
2016年记者节感言
2015/12/08 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers