html2canvas踩坑–安卓因屏幕分辨率高生成图片过大,导致无法分享图片问题
前置条件:
年关将至,需求是活动类。要求根据后端返回的字段合成海报3屏长度的海报分享微信。因为开发的时候是用 chrome 模拟html2canvas生成图片后没有发现有问题,但是用真机调试时,发现安卓手机始终调不起微信卡住了。
排查过程:
通过在安卓手机调试发现,安卓机生成海报的大小要比ios生成的海报大的多。由此推测可能是移动端像素密度计算的问题。
设备像素比 (简称 dpr) 定义了物理像素和设备独立像素的对应关系,它的值可以按如下的公式的得到:
设备像素比 = 物理像素 / 设备独立像素 // 在某一方向上,x方向或者y方向
解决办法:
通过各种面向百度之后发现,,从 0.5.0 -beta4版本开始,html2canvas更新了图片放大清晰度解决方案,支持任意放大倍数,解决原插件图片偏移问题。
github上示例
在我的代码中,先是获取屏幕像素比,发现大多数的安卓手机像素比是3,相对应生成的图片自然就大,由于我们原生微信分享代码版本本身存在问题,然后通过scale属性进行统一设置,问题得以解决。