- 复现路径:
使用getCanvasImageData获取Uint8ClampedArray数据,进行处理后使用putCanvasImageData重新绘制。重新绘制后画布的Uint8ClampedArray数据为A
使用canvasToTempFilePath导出图片,在成功回调中使用getCanvasImageData获取临时文件的数据,为B。
A与B之间的差异在模拟器下可以接受,但在真机环境下失真很严重,如下图
- 截图:
模拟器:
真机(iOS12.1.1):
不知道这个问题能不能改进,还是说运行时环境本身的问题。
把导出的图片draw回canvas能跟原图保持一致吗,大小是否一致?要确保导出的图片跟原图像素一致再进行对比才能反映偏差。
复现代码片段中忘设置canvas尺寸了。
再次检查了下,尺寸是没有问题的,模拟器中导出图片draw回canvas是完全一致的,但是真机中失真很大。
我这边测试看偏差还可以接受,上下 5 左右,应该没有上图显示的 10+ 吧
辛苦。
因为我是想操作像素的alpha通道数值,但真机上导出后有差异的像素点数量太多了,不能保留正确的alpha通道值。
具体像素值偏差的话我在测试时的结果不稳定,有时上下5有时10+,感觉这个跟运行时环境关系较大,如果暂时无法优化这个的话只能先不做了..
即便输出和原图宽高一致,图片的大小几乎和原图一样;调整宽高是原图的3倍,文件几乎是源文件的3倍大,可是对于清晰度来讲根本没用。最后发现图片的dpi被修改了,原图的dip是300,canvas导出的图片dpi是96。怎么可能清晰呢?不明白这个dpi修改的机制和原理?有懂得人给科普下呗。。。
麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
iPhone7,微信7.0.3,iOS12.1.1,基础库2.6.4
复现代码片段:https://developers.weixin.qq.com/s/uaT01im37c78