微信小程序:wxml-to-canvas 使用记录

news/2024/7/20 1:57:46 标签: 小程序, 微信

原因:界面上有保存图片、在微信端分享的需求,以前有类似功能,前端实现页面模板,通过后端使用PhantomJS 无界面的浏览器组件渲染后进行截图实现,但生成过程较慢,经商议本次通过前端实现保存图片功能

目的:通过把页面用canvas绘制,从而导出为图片保存在手机。

介绍:不同于h5有许多调用简单、可以截取页面的成熟插件,在微信小程序上绘制canvas 除了使用原生canvas外,官方提供了wxml-to-canvas组件。尽管并不完善,但相比直接canvas绘制,方便了序多,另外还有Painter (第三方组件)也类似。

问题:组件渲染支持view、image、text 标签。默认flex布局,引入的图片地址需要是https 开头的网络图片地址,所有文字内容要用text标签包裹、并且需要指定宽高,文字不会自动换行,超出部分会截断。所以相较于静态页面,对于动态获取数据的页面,需要计算宽高及位置

1、组件在真机上不展示,提示canvas has not been created。
解决方法:npm构建后发现 ,miniprogram_npm/wxml-to-canvas/index.js 文件内,sdk版本在2.9.2 后可用canvas 2d 接口,

 真机上版本较低,于是注释并设置值为false,在真机上展示出来了

2、计算所有元素宽高位置

解决:由于页面内容大部分动态获取、宽高不定,全部计算工作量很大,用了比较笨的方法,先布局出一模一样的wxml页面,渲染后,通过

query = wx.createSelectorQuery().in(this)

query.select('.demo').boundingClientRect(res=>{}).exec()

获取每个元素的宽高位置后赋值实现,与此同时,文字的行距、字号大小无法获取,需要根据设计图和页面比例另外计算,注意:Dpr为2和3时的字号大小有区别

3、不支持字体加粗

解决方法:同上,在index.js文件内,修改代码实现。但是注意,在使用fontWeight:"bold"后的文字都变成加粗,网上有人推荐加粗写在最后,可避免影响其他的样式,试过后依然会影响。
结果:放弃使用加粗

 

4、图片变形:绘制出的image,无法等比显示,图片要么压缩,要么被拉伸,效果较差,

结果:未解决

5、渲染:canvas需要在页面资源加载完成后再创建渲染,否则会失败。

问题: 保存为图片的时间非常久

结果:后来经查询,设置图中两个属性后,保存图片速度提升很多。

结果:由于图片内容和尺寸关系,保存时间最终在3-5秒之间

综合结论:

虽然保存长图最终在3-5秒之间,比后台截图快了一些,但不如预期。

考虑到投入工作量、解决兼容性问题消耗的时间和最终保存图片的效果来看,对于宽高动态计算的页面,推荐前端实现模板,后台截图实现保存效果更好。

对于在微信小程序上的同类型保存功能,前端比较适合实现简单布局的页面图片保存。


http://www.niftyadmin.cn/n/508375.html

相关文章

GIS中的坐标

GIS中的坐标 陈玉进 李泉 南京跬步科技有限公司(http://www.creable.cn) 地图是用坐标来描述的,而坐标又是如何确定的呢?地球是一个形状不规则的球体,而且高低起伏,为了研究的方便,我们用一个规…

element ui Checkbox多选框的半选、不选、选中状态控制

<el-checkbox v-model"checked">备选项</el-checkbox> 在实际使用中&#xff0c;经常有多层级目录的半选、不选、选中状态切换&#xff0c;会用到indeterminate属性 如上图组件示例的解释说“一般用于实现全选的效果”这句&#xff0c;有些让人迷惑。 …

地理空间语义的中文匹配与查询

地理空间语义的中文匹配与查询",不知道用什么词来表达这个意思,试图去解释一下它的涵义: 一、地理空间语义的中文匹配 1)定义 就是把用中文描述的地理空间位置,在地图上定位到这个位置.比如说,如果地图上没有标出金陵饭店的位置,我们通过下面的语句,能在地图上大体地知…

html table 表格内固定列的css实现

目标&#xff1a;不考虑使用UI组件&#xff0c;利用css和table标签实现表格前几列固定在左侧&#xff0c;其余内容水平滚动 实现方式:利用css 属性 position: sticky; 首先查询一下使用场景浏览器是否兼容&#xff08;下图&#xff09;&#xff0c;确保在需要的场景上支持 …

空间索引

空间索引 陈玉进 李泉 南京跬步科技有限公司&#xff08;http://www.creable.cn&#xff09; 在介绍空间索引之前&#xff0c;先谈谈什么叫“索引“。对一个数据集做”索引“&#xff0c;是为了提高对这个数据集检索的效率。书的”目录“就是这本书内容的”索引“&#xff0c;当…

解决html文字被篡改,并且额外添加font标签,显示成其他内容

无意中QA提出了这么一个问题&#xff0c;页面原本的文字被莫名其妙的替换了&#xff08;如下图红框中&#xff09;&#xff0c;检查了接口和源码中没有这些文字&#xff0c;注&#xff1a;电脑是否中毒不在关注范围内 审查元素发现原本文字所在的位置&#xff0c;被额外添加了f…

mac 上用charles 抓包pc端微信小程序

原因&#xff1a;个别电脑打开pc端小程序接口报错&#xff0c;需要查看具体请求参数排除原因 配置charles 1、选择菜单栏Help->SSL Proxying->Install Charles Root Certificate 2、如下图&#xff0c;需要设置信任安装的证书 3、在菜单栏选择Proxy->SSLProxying Se…

网格索引

网格索引 陈玉进 李泉 南京跬步科技有限公司&#xff08;http://www.creable.cn&#xff09; 上一节向大家介绍了空间索引的概念和用途&#xff0c;这一节重点介绍一种常用的空间索引形式——网格索引。 网格索引就是在一个地图图层上&#xff0c;按每个小网格宽△w,高△h…