之前的一个项目里有一个功能是将图片不规则形变,几经周折最终实现了这个功能,但是会变形的时候会有透明的细线(变形的方法是将图片切割成若干个小三角形块,然后对每个三角形块进行形变,然后合成),研究一番之后发现是 lineTo
导致的,在没有指定 strokeStyle
时 lineTo
方法会有透明的细线,事已至此,我也无能为力了。
客户一直追着这个问题不放,我只能告知是浏览器的问题实现不了(这个功能实现不了的,不行的,哈哈…),然而这件事并没有这样就了结,客户找来了类似产品的相似功能,没有细线,噗…
后面的事情就简单了,研究类似产品。
有一个前提是产品都是 web 打包成的客户端应用,我这边用的 electron
,类似产品那边用的应该是 nw.js
,然后客户的产品只有客户端,类似产品的既有客户端也有web端。
我发现类似产品在客户端里是没有细线的,但是在 Chrome 中也是有细线的。然后客户那里又反馈说类似产品在qq浏览器等国产浏览器里也是没有细线的。这就让我很惊讶了,啥时候国产浏览器怎么牛b了,再说了这些国产浏览器不都是基于 Chrome 内核吗?
头大啊!想不通,然后下载类似产品的客户端开始研究发现他们的 package.json
文件中指定了 Chrome 的版本为54。然后赶紧去看 Chrome 现在的版本以及那些国产浏览器的版本。发现果然现在 Chrome 的版本是 61 而其他国产浏览器的版本都是 54。赶紧写个 demo 放在浏览器里测试一下,果然是这样, Chrome 版本的锅。然后就在 electron
中指定 Chrome 版本问题就解决了。
在 Chrome 55 之后的版本以及最新的 Safari 、FireFox 等浏览器里 canvas 的 lineTo
方法都是有透明细线的,具体是什么原因还没有查到(可能是我查的姿势不对 :( ),等有空了再好好查查资料…