canvas2image 开发中遇到的问题
ios里,生成的图片不显示
canvas.toDataURL('image/jpeg', 1.0)
使用image/jpeg格式,在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。
canvas 是弹出层时,底层有滚动条,会有部分空白
测试的时候,好奇为啥每次,生成的图片都缺一部分,而且都是从顶部开始空白,再绘制图片。
解决方案: 添加绘制坐标y起始位置 y: window.pageYOffset,
html2canvas(target, { useCORS: true, y: window.pageYOffset, }).then(...)
ios 生成图片时显示时不显的,大图几乎不显示。
猜测是图片渲染的原因,为了确保能够生成图片,生成图片写在了所有图片加载完成之后,才进行canvas绘制图片功能,但是还是有渲染不出来的情况。这个搜了很久,跨域 useCORS: true
,也添加了。
Android是没有问题的。
然后搜了很多看到这么一段话:
原因跟html2canvas库的工作原理有很大的关系.html2canvas库需要我们先提供一段DOM节点,然后它再读取并解析这一段DOM节点生成canvas对象。如果DOM节点中已经使用了<img>标签的话,它也会解析这个<img>标签的src属性,然后重新创建一个Image对象,给它添加crossOrigin="anonymous"
属性后尝试以跨域的方式重新读取图片数据。需要注意的是,一般CDN上的图片都是带有缓存响应头并且会在浏览器端缓存的,而且缓存的不仅仅是图片数据,还有HTTP响应头。所以问题的根本原因我们就找到了,当html2canvas尝试以跨域的方式去读取图片数据时,它读取到的是浏览器的缓存数据,而且因为我们没有给DOM节点中的<img>标签添加crossOrigin="anonymous"
属性,所以缓存数据是不带Access-Control-Allow-Origin响应头的,进而导致html2canvas库读取到的图片数据污染了生成的canvas对象,最终致使canvas导出数据报错
所以我们要做的事情也很简单,就是给DOM节点中的每一个<img>标签都加上crossOrigin="anonymous"
属性就可以了。
我这边暂时搞定了,但是看网上不少人说还有问题,也可能是我测试的机型少,这个问题还是需要关注一下。
相关推荐
songfens 2020-07-04
MIKUScallion 2020-06-11
songfens 2020-03-20
northwindx 2020-01-04
jinxiutong 2019-12-27
大地飞鸿 2019-12-24
songfens 2019-12-06
飞翔的鱼 2019-11-17
大地飞鸿 2019-11-08
fanbih 2018-09-11
songfens 2019-10-21
blair 2019-06-10
lanseguhui 2019-07-01
church 2019-07-01
lanseguhui 2019-07-01
Yaro 2019-07-01
yaosir 2019-07-01
yixiaof 2019-06-30