- [开盖即食]小程序Canvas官方新版API实战
[图片] [图片] 最近本人在开发一个新项目的时候,注意到官方在2.9.0开始支持了一个canvas 2D的新API,同时对webGL上支持也有了很大的改进,相信很多人用canvas的组件做一些分享海报,战绩和新闻帖功能。 [图片] 这里是新的引入方式。 官方文档地址: https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html 那么新的canvas2D API有啥好处呢? 原本的API微信有做一定的修改,现在全面支持源生H5 JS的写法,迁移H5的老代码变成更加容易,学习成本更低 修复了一些诡异的BUG,例如原本在IOS早期版本写法顺序会导致clip()图片裁切失效等~ 性能上的优化和提升,复杂动画上帧数明显 举例写法上的一些改变: 1、设置font的写法: [代码]//原本(传值的写法) ctx.setFontSize(20); ctx.fillText('MINA', 100, 100) ctx.draw() //现在(和源生H5写法一致,赋值) ctx.font = "16px"; ctx.fillStyle = 'blue'; //可以直接写颜色,原本的不支持 //不需要 ctx.draw() [代码] 2、获取并添加图片写法: [代码]//原本 //使用的是 wx.getImageInfo的方法 wx.getImageInfo({ src: mainImg,//服务器返回的图片地址 success: function (res) { console.log(res); ctx.drawImage(res.path, 0, 0); ctx.draw(true); }, fail: function (res) { //失败回调 } }); //现在 //可以直接img.onload调用 const headerImg = canvas.createImage(); headerImg.src = headImage;//微信请求返回头像 headerImg.onload = () => { ctx.save(); ctx.beginPath()//开始创建一个路径 ctx.arc(38, 288, 18, 0, 2 * Math.PI, false)//画一个圆形裁剪区域 ctx.clip()//裁剪 ctx.drawImage(headerImg,0,0); ctx.closePath(); ctx.restore(); } [代码] 3、将canvas生成虚拟地址便于下载(重点): [图片] 由于官方文档没有写清楚,误导了挺多人的。这里canvas对象必须通过选择器获取,并获得对应的node节点。 [代码]async saveImg() { let self = this; //这里是重点 新版本的type 2d 获取方法 const query = wx.createSelectorQuery(); const canvasObj = await new Promise((resolve, reject) => { query.select('#posterCanvas') .fields({ node: true, size: true }) .exec(async (res) => { resolve(res[0].node); }) }); console.log(canvasObj); wx.canvasToTempFilePath({ //fileType: 'jpg', //canvasId: 'posterCanvas', //之前的写法 canvas: canvasObj, //现在的写法 success: (res) => { console.log(res); self.setData({ canClose: true }); //保存图片 wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function (data) { wx.showToast({ title: '已保存到相册', icon: 'success', duration: 2000 }) // setTimeout(() => { // self.setData({show: false}) // }, 6000); }, fail: function (err) { console.log(err); if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") { console.log("当初用户拒绝,再次发起授权") } else { util.showToast("请截屏保存分享"); } }, complete(res) { wx.hideLoading(); console.log(res); } }) }, fail(res) { console.log(res); } }, this) }, [代码] 分享个canvas海报的代码片段: [图片] 片段名: PoCf4emw7TgE 片段link: https://developers.weixin.qq.com/s/PoCf4emw7TgE [图片] [图片] 总结,相对之前还要看官方文档的canvas自定义API,现在写起来更加的方便,老代码迁移起来得心应手,只要你之前会canvas,那么各种效果和动画,拿来就怼,没什么大问题~ 一些奇怪的问题(注意!!!) canvas 2d 目前(2020年4月3日)还不支持真机调试,会报错!!! IDE工具 1.02.2003190 直接保存新版本canvas的API图片是打不开的,但是直接用手机保存在相册是没问题的,请更新到1.02.2003250 最新版即可解决~ 一些老款手机用新的API保存图片会有报错问题,如华为NOTE10,请更新系统到能支持的最新,且微信也是,即可解决~ 部分Android设备诡异的闪退和报错 [图片] 这种有可能是代码写法的问题,比如: [代码]//缺省写法 会导致部分Android机器 闪退 ctx.font = "bold 16px"; ctx.fillStyle = "#000" //在canvas 2D的写法中,所以写法必须规范且完整 ctx.font = "normal bold 12px sans-serif"; ctx.fillStyle = '#707070'; [代码] 所以在canvas 2D 的环境,所以写法必须原始且规范,不能用缺省写法,不然就会有诡异的闪退/报错。 后续:官方在7.0.13的Android版本已修复。 https://developers.weixin.qq.com/community/develop/doc/00088c13e1437890692afd8d85ec00 看完觉得有帮助记得点个赞哦~ 你的赞是我继续分享的最大动力!^-^
2020-05-09 - 小程序云开发训练营
[图片] 微信小程序已经成为一种新的应用形态,为众多开发者带来日趋完善的生态服务和不断丰富的开放能力,特别是小程序开放的云开发能力,可以帮助开发者快速构建微信小程序的后端服务。 本次微信小程序应用开发赛(以下简称“大赛”)的参赛作品应为具有适用场景和对应功能的原创性微信小程序,期望参赛队伍以微信小程序平台以及微信小程序云开发等技术和服务为基础,设计和开发具有实际需求或未来前景的创新应用。对于使用小程序云开发实现的大赛作品(以下简称“云开发小程序”),将独立保证入围赛区决赛名额,并在全国决赛中单独设立云开发奖项。 为了帮助更多在校学生理解小程序云开发相关知识,并更加规范、高效地打造云开发小程序应用,特开设小程序云开发训练营,通过体系化的课程内容,较为完整地介绍小程序云开发的系列知识,完整参与还可获得由腾讯云云开发提供的学习礼品。 *课程内容完全基于官方的开放文档和教程进行设置,无任何新增或特殊内容,不影响大赛的正常报名、参赛和作品提交等全部流程。 *建议收藏本页以便后续学习。 一、课程设置: 1、学习指引:小程序云开发知识分等级梳理(以文档为主,更多教程与视频可前往微信学堂或CloudBase社区官网) (1)小程序云开发基础能力(在微信小程序中可以基础使用) 【文档】 云数据库基本使用 云存储基本使用 云函数基本使用 云调用的认识和基本使用 【视频】 云开发基础等 (2)小程序云开发进阶能力(在小程序之外的延伸场景中使用) 使用CMS内容管理实现数据管理 使用静态网站托管制作微信公众号H5 未登录模式的使用(小程序分享朋友圈) 云函数进阶用法:灰度/版本管理,高级日志,定时触发器 数据库实时数据推送 (3)小程序云开发高阶能力(对云开发更加熟悉) 云托管的认识和使用 数据库安全规则的学习 跨账号环境共享的认识 深度理解云函数运行原理 云开发接入微信支付的学习 云开发HTTP API的学习 了解第三方服务商模式开发 更多学习资源:微信学堂、CloudBase社区官网 2、互动直播 4月7日 晚19:00 小程序云开发基础能力讲解 查看回放 4月14日 晚19:00 小程序云开发进阶能力讲解 查看回放 4月21日 晚19:00 小程序云开发高阶能力&案例讲解 查看回放 直播地址:腾讯云云开发 视频号 [图片] *回放视频将沉淀在微信学堂、腾讯云云开发同名B站账号。 二、参与方式 大赛进行期间,可随时自主学习。完成结课作业,还可获得额外奖励: 结课作业:基于课程内容和自身的学习成果,输出一份云开发学习报告,内容需与云开发相关,主题不限(学习心得/参赛经历感悟/建议反馈/实战案例分享等均可),形式不限(文章/视频等均可),提交至 CloudBase@tencent.com。 具体提交模板: 邮件名称:【云开发训练营】姓名 + 学校名称 + 题目 邮件正文需包含: 主题:学习心得/参赛经历感悟/建议反馈/实战案例分享/ 其他正文内容:如有视频可注明视频地址。参与大赛的小程序 AppID(用于验证是否参赛)队友信息(用于验证是否参赛)联系方式:微信号/QQ号收货信息(用于邮寄礼品)个人简历(建议以 PDF 附件形式发送)作业提交日期:2021年6月1日至2021年7月15日(非规定日期内发送无效) 提交的结课作品,要求不得出现: 违反相关法律、法规、政策规定以及微信相关规则的行为; 涉嫌抄袭或侵犯他人知识产权的行为; 涉及不健康、淫秽、色情或毁谤第三方的内容。 三、奖品设置 在大赛中提交云开发小程序作品,且在规定时间内提交结课作业的同学可获得如下奖品: 参与即送: 小程序云开发技术书《云开发:小程序开发原来如此简单》 优秀参与者可获得: 云开发布道师申请资格 云开发CloudBase实习面试机会(具体岗位视具体情况而定) 优秀参与者还可在如下奖品中任选一个,每种奖品数量有限送完即止(按照结课作业提交顺序进行选择): [图片] *图片仅供参考,实际奖品选择与发放将视官方周边更新与存货情况进行适当调整
2021-06-01