微信小程序 ios端 canvasToTempFilePath: fail canvas is empty

微信小程序 ios端 canvasToTempFilePath: fail canvas is empty

机型

iphone 6s

ios:11.1.0

说明

此文章,旨在说明解决和发现问题的思路,仅供参考。

问题:canvas生成海报图没有没有提示

这个问题一开始是测试人员发现的,在ios设备上点击保存海报是没有反应的。 Android 确是可以正常运行的

后期发现问题之后,我发现iphone设备并不是没有提示,而是图片并没有保存下来,并没有存储在本地。 这里我是从后往前检查的,真机调试的环境下并没有打印出应该出现的提示语句,说明了这个值并不存在,那么这个将canvas转为本地图片保存的方法有问题会导致图片路径不存在。 接下来就要去检查 canvasToTempFilePath这个专门用于保存的图片的api了。 在这个api中声明一下fail错误处理函数,不出意外报了 canvasToTempFilePath: fail canvas is empty的异常。知道哪里问题了,剩下就是百度了。

真正的问题

canvas 的渲染函数是 draw 这个操作是异步。因为我没有仔细去查阅文档,并不清楚它可以传递回调函数。所以我在渲染函数后面用的定时器去解决这个异步。在当时是可以,没有出现问题,因为那个时候用的自己和同事的手机都是比较高端的机器,渲染速度很快。并没有出现这个问题,若用了前几年的老机型,渲染速度不高的情况下,定时器的时间写死就会有问题,它还没有渲染完成,就保存的了图片,就会报这样的异常。

解决方案

最后是在 canvas 的 渲染函数 draw 中的回调函数去保存这个图片。就ok 了

经验分享 程序员 微信小程序 职场和发展