收藏
回答

canvasToTempFilePath导出图片数据失真

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.canvasToTempFilePath 客户端 7.0.3 2.6.4

- 复现路径:

  1. 使用getCanvasImageData获取Uint8ClampedArray数据,进行处理后使用putCanvasImageData重新绘制。重新绘制后画布的Uint8ClampedArray数据为A

  2. 使用canvasToTempFilePath导出图片,在成功回调中使用getCanvasImageData获取临时文件的数据,为B。

  3. A与B之间的差异在模拟器下可以接受,但在真机环境下失真很严重,如下图


- 截图:

模拟器:



真机(iOS12.1.1):



不知道这个问题能不能改进,还是说运行时环境本身的问题。

回答关注问题邀请回答
收藏

3 个回答

  • Eric Huang
    Eric Huang
    2019-04-04

    把导出的图片draw回canvas能跟原图保持一致吗,大小是否一致?要确保导出的图片跟原图像素一致再进行对比才能反映偏差。

    2019-04-04
    有用
    回复 3
    • 零式飞翼高达
      零式飞翼高达
      2019-04-04

      复现代码片段中忘设置canvas尺寸了。


      再次检查了下,尺寸是没有问题的,模拟器中导出图片draw回canvas是完全一致的,但是真机中失真很大。

      2019-04-04
      回复
    • Eric Huang
      Eric Huang
      2019-04-08回复零式飞翼高达

      我这边测试看偏差还可以接受,上下 5 左右,应该没有上图显示的 10+ 吧

      2019-04-08
      回复
    • 零式飞翼高达
      零式飞翼高达
      2019-04-08回复Eric Huang

      辛苦。


      因为我是想操作像素的alpha通道数值,但真机上导出后有差异的像素点数量太多了,不能保留正确的alpha通道值。


      具体像素值偏差的话我在测试时的结果不稳定,有时上下5有时10+,感觉这个跟运行时环境关系较大,如果暂时无法优化这个的话只能先不做了..

      2019-04-08
      回复
  • zzzzz
    zzzzz
    2020-01-08

    即便输出和原图宽高一致,图片的大小几乎和原图一样;调整宽高是原图的3倍,文件几乎是源文件的3倍大,可是对于清晰度来讲根本没用。最后发现图片的dpi被修改了,原图的dip是300,canvas导出的图片dpi是96。怎么可能清晰呢?不明白这个dpi修改的机制和原理?有懂得人给科普下呗。。。

    2020-01-08
    有用
    回复
  • 是小白啊
    是小白啊
    2019-04-01

    麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-04-01
    有用
    回复 1
登录 后发表内容