如何使用canvas

一、wxhl

<canvas canvas-id="myShareCanvasTemp" style="width: 100%;height: 100%;" />

请忽略一下正文的*rpx,该代码片段为实例代码片段复制,rpx是为适应不同机型所做的适配

二、js

  const ctx = wx.createCanvasContext('myShareCanvasTemp')//获取canvas  id//绘制最大背景ctx.beginPath()ctx.setFillStyle('#ECFAFD')this.roundRect(ctx, 0, 0, 345 * rpx, 515 * rpx, 8 * rpx); //(ctx canvas上下文,x坐标,y坐标,宽度,高度,圆角的半径),该方法再下面// ctx.fill()//当一个图形画在另一个图形中,需要使用ctx.closePath()关闭画笔位置在另起ctx.beginPath()画笔位置,要不然会不显示以下绘制ctx.closePath()ctx.beginPath()//绘制两个大的白色背景ctx.rect(7 * rpx, 7 * rpx, 332 * rpx, 175 * rpx) //填充一个矩形(x轴坐标,y轴坐标,矩形宽,矩形高),strokeRect:画一个矩形(非填充)。 用 setStrokeStyle 设置矩形线条的颜色ctx.setFillStyle('#fff')ctx.fill()ctx.rect(7 * rpx, 185 * rpx, 332 * rpx, 250 * rpx)ctx.setFillStyle('#fff')ctx.fill()//运动周报背景矩形样式ctx.drawImage('/img/me/weekBackgroung.png', 120 * rpx, 7 * rpx, 112 * rpx, 28 * rpx)//用户头像var avatarurl_width = 44 * rpx; //绘制的头像宽度var avatarurl_heigth = 44 * rpx; //绘制的头像高度var avatarurl_x = 150 * rpx; //绘制的头像在画布上的位置var avatarurl_y = 47 * rpx; //绘制的头像在画布上的位置ctx.save(); //保存ctx.beginPath(); //开始绘制//先画个圆   前两个参数确定了圆心 (x,y) 坐标  第三个参数是圆的半径  第四,五参数是起始角, 第六参数是绘图方向  默认是false,即顺时针ctx.arc(avatarurl_width / 2 + avatarurl_x, avatarurl_heigth / 2 + avatarurl_y, avatarurl_width / 2, 0, Math.PI * 2, false); //创建一条弧线(圆心的 x 坐标,y坐标,半径,起始弧度,终止弧度,弧度的方向是否是逆时针)ctx.clip(); //画好了圆 剪切  原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因// console.log("chartImg",this.data.chartImg);ctx.drawImage(this.data.userpic, avatarurl_x, avatarurl_y, avatarurl_width, avatarurl_heigth); // 推进去图片,必须是https图片ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下文即状态 还可以继续绘制//用户名ctx.setFontSize(14) //设置文本大小 + 字体ctx.setFillStyle("#333333");// ctx.textAlign = 'center'//文字水平居中// ctx.textBaseline = 'middle'//垂直居中ctx.fillText(this.data.userInfo.enName, 140 * rpx, 117 * rpx) //在画布上绘制被填充的文本//时间区间圆角ctx.setFillStyle("#ECFAFD"); // 设置填充色this.roundRect(ctx, 105 * rpx, 140 * rpx, 150 * rpx, 22 * rpx, 16 * rpx); //(ctx canvas上下文,x坐标,y坐标,宽度,高度,圆角的半径)ctx.fillText('鹅步走', 75 * rpx, 475 * rpx)//分享二维码  图片建议在外先生成 再在画布中使用ctx.drawImage(this.data.epic, 275 * rpx, 450 * rpx, 56 * rpx, 56 * rpx)ctx.draw()

绘制圆角矩形

  //绘制圆角矩形方法一roundRect(ctx, x, y, w, h, r) { //绘制圆角矩形(无填充色))ctx.save(); //保存绘图上下文。if (w < 2 * r) {r = w / 2;}if (h < 2 * r) {r = h / 2;}ctx.beginPath(); //开始创建一个路径。需要调用 fill 或者 stroke 才会使用路径进行填充或描边ctx.setStrokeStyle('#fff'); //设置描边线条颜色// ctx.setFillStyle("#ccc");// ctx.setLineWidth(1);//设置线条的宽度// ctx.setFillStyle("#ccc");ctx.moveTo(x + r, y); //把路径移动到画布中的指定点(起点),不创建线条。用 stroke 方法来画线条ctx.arcTo(x + w, y, x + w, y + h, r); //画线  路径ctx.arcTo(x + w, y + h, x, y + h, r);ctx.arcTo(x, y + h, x, y, r);ctx.arcTo(x, y, x + w, y, r);ctx.fill(); //对当前路径描边ctx.closePath(); //关闭一个路径。会连接起点和终点。如果关闭路径后没有调用 fill 或者 stroke 并开启了新的路径,那之前的路径将不会被渲染},

温馨提示:不建议使用textAlign = 'center'//文字水平居中 textBaseline = 'middle'//垂直居中 这两个字段,会造成真机上的不确定性,破坏画布的正常显示


总结

技术小白开发实例,如有不对,欢迎指正交流

具体详细的绘图canvasAPI建议去看这位大神的canvasAPI详解

微信小程序使用canvas画布相关推荐

  1. 微信小程序之canvas画布

    一.前言 只要干不死,就要往死干!!! 本次带来的是关于微信小程序之画布的相关功能,具体详见代码↓ 二.图例 功能点:颜色选择.直线.矩形.圆形.画笔.输入框.线条宽度.还有特定图标.橡皮擦 .撤销. ...

  2. 微信小程序-基于canvas画画涂鸦

    代码地址如下: http://www.demodashi.com/demo/14461.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  3. 解决了:微信小程序使用canvas绘制倒计时圆圈和数字居中的实现

    微信小程序使用canvas绘制倒计时圆圈和数字居中的实现 1.显示结果 2.过程: (1)wxml + css <!-- 每道题 --><view style="backg ...

  4. 微信小程序使用canvas绘图并下载

    微信小程序使用canvas绘图并下载 实现的功能: canvas绘制页面 当前页面可下载 文字自动换行 实现的效果最终如下图所示: 在这里插入图片描述 实现步骤: 1.页面初始化获取屏幕尺寸 onLo ...

  5. html5绘制图形幸运大转盘,微信小程序利用canvas 绘制幸运大转盘功能

    小程序对 canvas api 跟h5的不太一致 ,所以这个搞的比较久,不多说,先贴代码 Page({ /** * 页面的初始数据 */ data: { awardsConfig: {}, resta ...

  6. 微信小程序使用canvas绘制二维码实现跳转小程序

    开始接到这个需求的时候,我查阅文档获取小程序码 | 微信开放文档 发现两种途径 需要后端在服务器上调用接口拿到二维码,因为调用的 https://api.weixin.qq.com这个域名是不允许上白 ...

  7. 微信小程序利用canvas实现六边形蜘蛛图

    微信小程序利用canvas实现六边形蜘蛛图 发布时间:2018-01-24 14:30:29 1..wxml <canvas style="width: 200px; height: ...

  8. 微信小程序使用canvas绘制海报并保存本地相册

    在做微信小程序的时候,很多都会用到生成海报分享功能,刚好最近项目有这个需求,今天就发出来记录下 首先是使用canvas绘制一张海报,微信小程序的canvas有老版本和新版本我是用的是新版本 代码如下 ...

  9. 【微信小程序】小程序使用canvas画布生成分享朋友圈的海报

    思路: 利用小程序组件canvas放置一个画布,然后再利用布局吧canvas画布隐藏,让其绘制成的图片显示在我们的前端页面上面就可以了,最后在利用API将图片保存到我们手机上面就完成了. 上代码! w ...

最新文章

  1. 挑战“IT我最大 Win7由你秀”
  2. Android菜鸟成长记4-button点击事件
  3. VC++ 从View类获取各种指针编程实例
  4. 我的书法记录--2018.12.2
  5. EE Servlet 3:如何在Web应用程序中设置后端服务
  6. oracle 02085,OracleDBLink创建和维护以及ORA-02085解决办法
  7. java中的多态与继承_【Java学习笔记之十六】浅谈Java中的继承与多态
  8. axure菜单移动隐藏_如何使用隐藏的移动网络更快地完成工作
  9. 十分钟带你学会Http协议和Tomcat服务器的原理
  10. 04-07 接口请求构造
  11. TCP通信之获取本机IPV4地址
  12. 毅航产品—模拟载板I
  13. matlab的conv2、imfilter、filter2
  14. GhostNet论文
  15. php 查询数据传值,php-如何在Laravel中传递数据进行查看?
  16. python怎么判断字符串中包含特殊符号
  17. 抖音一个好的标题让你轻松上热门,该怎么写好抖音标题。
  18. private关键字使用实例
  19. java 一年有多少周_java中如何计算一年总共有多少周
  20. LILO使用指南(上)

热门文章

  1. 嵌入式培训如何学?什么人适合转行嵌入式开发?
  2. Android 开发小技巧(2)
  3. 团队RESTful 风格API规范
  4. SQLException: The server time zone value ‘EDT‘ is unrecognized or represents more than one time zone
  5. 12 如何用网格策略网住收益?——实操篇
  6. 2021年中国全自动棉纱缠绕机市场趋势报告、技术动态创新及2027年市场预测
  7. spark xgboost 特征重要性分析 gain、cover、freq
  8. 计算机中的cad是什么意思是,cad是什么意思 cad是什么软件
  9. VS2010启动后鼠标失灵解决方法
  10. 无线串口服务器的配置与连接调试,使用WIFI串口服务器USR-WIFI232-604与485读卡器实现通信...