X6 icon indicating copy to clipboard operation
X6 copied to clipboard

绘制大量节点后,导出图片会报错: size exceeded

Open damnright opened this issue 3 years ago • 6 comments

问题描述

绘制大量节点后,导出图片会报错: size exceeded,报错的源码部分是什么含义呢

重现链接

1

重现步骤

绘制大量节点后,导出图片会报错: size exceeded,报错的源码部分是什么含义呢

预期行为

绘制大量节点后,导出图片不报错

平台

  • 操作系统: [macOS, Windows, Linux, React Native ...]
  • 网页浏览器: [Google Chrome, Safari, Firefox]
  • X6 版本: [1.28.2 ... ]

屏幕截图或视频(可选)

捕获

补充说明(可选)

No response

damnright avatar Jul 21 '22 09:07 damnright

我觉得是canvas生成图片时,调用getImageData()未获取对应坐标的图像像素数据,getImageData().data返回的Uint8ClampedArray其中一个为0,导致进入了判断,抛出了错误size exceeded

babachao avatar Jul 21 '22 12:07 babachao

还有一种可能是图片的宽高超过出画布的宽高,获取不到对应的图像数据

babachao avatar Jul 21 '22 12:07 babachao

这部分代码看着像是在画布末尾添加了个1像素的色块,可能是通过这个色块是否正常来判断浏览器显存是否满了?

damnright avatar Jul 22 '22 02:07 damnright

还有一个问题,大量元素导出图片后,即使把quality设为1,图片还是超级模糊

damnright avatar Jul 22 '22 02:07 damnright

我在本地测试,添加了2万个node,可以正常导出图片,可以发一个你的报错的简单demo吗?我复现定位一下问题🥲🥲 @damnright

babachao avatar Jul 28 '22 10:07 babachao

我在本地测试,添加了2万个node,可以正常导出图片,可以发一个你的报错的简单demo吗?我复现定位一下问题🥲🥲 @damnright

这个问题是偶现的,在部分电脑上会出现卡死报错,即使不报错,执行时间也很久。画布的数据比较复杂,一方面是节点多,另一方面有很多base64图片节点、vue节点,节点间互相嵌套层级也有很多层。画布图元多了,图片就非常模糊

damnright avatar Jul 29 '22 07:07 damnright

图片模糊可以通过增大配置中的 width 和 height 来优化。

NewByVector avatar Jul 13 '23 07:07 NewByVector