• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

微信小程序 | canvas绘图

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、新的尺寸单位 rpx

  rpx(responsive pixel): 可以根据屏幕宽度进行自适应。

  规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

  设备 rpx换算px (屏幕宽度/750); px换算rpx (750/屏幕宽度)

2、小程序canvas总结

  小程序绘制的单位是px, 基础知识点请参考文档 ;

  canvas中存在一个坐标系,二维的,左上角坐标系(0,0);

  小程序 canvas 层级在视图中是最高的,高于一般的<view></view>, 覆盖 canvas 的层级用 cover-view

  canvas 绘制在线图片链接,需要匹配合法域名;且需要先使用 wx.downloadFile({}) 下载,生成图片的临时路径之后再绘制;

  下边是封装的 导出高清图,并且显示预览图片的使用场景,  

  1 const qr = require(\'../qrcode\')
  2 
  3 /**
  4  * system.windowWidth 可使用窗口宽度
  5  * system.windowHeight 可使用窗口高度
  6  */
  7 const system = wx.getSystemInfoSync()
  8 const w = 562
  9 const h = 1000
 10 
 11 function rpx(n, sizeType) {
 12   if (sizeType === \'save\') {
 13     return n
 14   } else {
 15     return n * system.windowWidth / 750
 16   }
 17 }
 18 
 19 function downloadImg (link) {
 20   return new Promise((resolve, reject) => {
 21     wx.downloadFile({
 22       url: link,
 23       success: res => {
 24         if (res.statusCode === 200) {
 25           resolve(res.tempFilePath)
 26         }
 27       }
 28     })
 29   })
 30 }
 31 
 32 module.exports = {
 33   /**
 34    * @param data
 35    *   data.title
 36    *   data.price
 37    *   data.unit
 38    *   data.url
 39    * @param option.sizeType 显示: display, 保存: save
 40    */
 41   draw (ctx, data, option = {}) {
 42     var sizeType = option.sizeType === \'save\' ? \'save\' : \'display\'
 43     return new Promise((resolve, reject) => {
 44       
 45       var bg_url = \'https://static001-test.geekbang.org/resource/image/c5/63/c54a6fde89dd9897a321a070a0555363.jpg\'
 46       var avatar_url = \'https://static001-test.geekbang.org/resource/image/35/65/35012b5a4b7576faaa1e565da142a565.png\'
 47       var column_url = \'https://static001-test.geekbang.org/resource/image/35/65/35012b5a4b7576faaa1e565da142a565.png\'
 48       var code_url =\'https://static001-test.geekbang.org/resource/image/e6/07/e618015af89d6ffcf37a6d148dff0b07.png\'
 49 
 50       var bg_path = \'\'
 51       var avarar_path = \'\'
 52       var col_path = \'\'
 53       var code_path = \'\'
 54 
 55       downloadImg(bg_url) // 下载背景
 56       .then((path)=> {
 57         bg_path = path
 58         downloadImg(avatar_url) // 下载头像
 59         .then((path) => {
 60           avarar_path = path
 61           downloadImg(column_url) // 下载专栏图片
 62           .then((path) => {
 63             col_path = path
 64             downloadImg(code_url) // 下载小程序菊花图
 65             .then((path) => {
 66               code_path = path
 67               ctx.beginPath()
 68               ctx.drawImage(bg_path, 0, 0, rpx(w, sizeType), rpx(h, sizeType)) // 画 背景
 69               ctx.save()
 70               ctx.arc( rpx(35 + 75/2,sizeType), rpx(44 +75/2, sizeType), rpx(75/2, sizeType), 0, 2 * Math.PI)
 71               ctx.clip()
 72               ctx.drawImage(avarar_path, rpx(35,sizeType), rpx(44, sizeType), rpx(75, sizeType), rpx(75, sizeType)) // 画 头像
 73               ctx.restore()
 74               ctx.drawImage(col_path, rpx(58,sizeType), rpx(305, sizeType), rpx(152, sizeType), rpx(152, sizeType)) // 画 专栏封面
 75               ctx.drawImage(code_path, rpx(219,sizeType), rpx(710, sizeType), rpx(129, sizeType), rpx(129, sizeType)) // 画 菊花码
 76               // 基础
 77               ctx.setTextAlign(\'left\')
 78               ctx.setTextBaseline(\'normal\')
 79               // 昵称 |<--
 80               ctx.setFillStyle(\'#Af7628\')
 81               ctx.setFontSize(rpx(22, sizeType))
 82               ctx.fillText(\'小原-极客时间\', rpx(118,sizeType), rpx(81, sizeType)) // 微信bug 参数分别是 ‘string’ 左下角x坐标 左下y坐标
 83               // 专栏名称 |<--
 84               ctx.setFontSize(rpx(28, sizeType))
 85               ctx.setFillStyle(\'#916a34\')
 86               ctx.fillText(\'左耳听风\', rpx(227,sizeType), rpx(332, sizeType))
 87               // 作者信息 |<--
 88               ctx.setFontSize(rpx(19, sizeType))
 89               ctx.setFillStyle(\'#ad936f\')
 90               ctx.fillText(\'陈皓 网名“左耳朵耗子”,资深...\', rpx(227,sizeType), rpx(363, sizeType), rpx(296, sizeType))
 91               // 学习人数 |<--
 92               ctx.setFontSize(rpx(18, sizeType))
 93               ctx.setFillStyle(\'#ad936f\')
 94               ctx.fillText(\'204人已参加学习\', rpx(227,sizeType), rpx(390, sizeType), rpx(263, sizeType))
 95               // 还差 2 人 |<--
 96               ctx.setFontSize(rpx(32, sizeType))
 97               ctx.setFillStyle(\'#B67e34\')
 98               ctx.fillText(\'2\', rpx(207,sizeType), rpx(599, sizeType), rpx(31, sizeType))
 99               // 原价  -->|
100               ctx.setTextBaseline(\'bottom\')
101               ctx.setTextAlign(\'right\')
102               ctx.setFontSize(rpx(17,sizeType))
103               ctx.setFillStyle(\'#cd9e5e\')
104               ctx.fillText(\'原价 ¥299\', rpx(489, sizeType), rpx(422, sizeType), rpx(115, sizeType))
105               // 现价  -->|
106               ctx.setFontSize(rpx(32,sizeType))
107               ctx.setFillStyle(\'#cd9e5e\')
108               ctx.setTextBaseline(\'bottom\')
109               ctx.fillText(\'¥199\', rpx(489,sizeType), rpx(459, sizeType), rpx(118, sizeType))
110               // 状态 -->|<--
111               ctx.setTextAlign(\'center\')
112               ctx.setFontSize(rpx(35,sizeType))
113               ctx.setFillStyle(\'#9d5c00\')
114               ctx.fillText(\'拼团进行中\', rpx(w,sizeType) / 2, rpx(239, sizeType))
115               
116               ctx.draw()
117               resolve()
118             })
119           })
120         })
121       })
122       
123     })
124   },
125   /**
126    * @param option.sizeType 显示: display, 保存: save
127    */
128   getSize (data, option = {}) {
129     var sizeType = option.sizeType === \'save\' ? \'save\' : \'display\'
130     return {width: rpx(w, sizeType), height: rpx(h, sizeType)}
131   },
132   getInfo () {
133     return {
134       btnName: \'保存分享海报\'
135     }
136   }
137 }
View Code

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
获取任何小程序源码发布时间:2022-07-18
下一篇:
关于微信小程序前端Canvas组件教程发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap