微信小程序使用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中input中readonly和disabled区别介绍
Oct 23 Javascript
一个JavaScript用逗号分割字符串实例
Sep 22 Javascript
基于jQuery实现美观且实用的倒计时实例代码
Dec 30 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
Jun 03 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
Jul 08 Javascript
JS搜狐面试题分析
Dec 16 Javascript
canvas实现弧形可拖动进度条效果
May 11 Javascript
浅谈原生JS中的延迟脚本和异步脚本
Jul 12 Javascript
jQuery中过滤器的基本用法示例
Oct 11 jQuery
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
vant 自定义 van-dropdown-item的用法
Aug 05 Javascript
js绘制一条直线并旋转45度
Aug 21 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
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP时间和日期函数详解
2015/05/08 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
JavaScript使用cookie
2007/02/02 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
11行JS代码制作二维码生成功能
2018/03/09 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
js实现打字小游戏
2019/12/17 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
vue的webcamjs集成方式
2020/11/16 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
python实现UDP协议下的文件传输
2020/03/20 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
党员查摆剖析材料
2014/10/10 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python