微信小程序使用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 定义初始化数组函数
Sep 07 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
Apr 03 Javascript
JavaScript实现动态添加,删除行的方法实例详解
Jul 02 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
基于react框架使用的一些细节要点的思考
May 31 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
深入理解Vue官方文档梳理之全局API
Nov 22 Javascript
微信小程序支付PHP代码
Aug 23 Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 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的网址
2006/11/25 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
Python笔记之facade模式
2019/11/20 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
Python多分支if语句的使用
2020/09/03 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
师范学院教师自荐书
2014/01/31 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
宣传工作经验材料
2014/06/02 职场文书
软环境建设心得体会
2014/09/09 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书