设置round lineJoin的canvas线条在非整数缩放时出现异常渲染问题
Canvas 线条特定缩放比例下渲染异常问题
设置了lineJoin="round"的canvas线条在特定缩放比例下会出现不符合预期的渲染效果,缩放比例为1.403619311470477和无缩放的对比可通过以下代码复现:
<canvas id="canvas" width="2000" height="2000"> </canvas> <script> const points = "45.13869240187139,481.020616681278,45.13869240187139,480.72980663647314,44.84788235706651,479.5665664572536,44.70247733466407,477.9671112108268,44.84788235706651,477.53089614361943,44.84788235706651,477.385491121217,44.993287379468946,476.80387103160723,45.28409742427383,476.22225094199746,46.44733760349335,475.059010762778,47.319767737907995,474.9136057403755,47.90138782751775,475.34982080758283,48.19219787232263,475.7860358747902,48.483007917127516,476.5130609868024,48.62841293952995,476.94927605400966,48.33760289472507,477.67630116602186".split(",") const ctx = canvas.getContext("2d") ctx.strokeStyle = "black" ctx.lineWidth = 2 ctx.lineCap = "round" ctx.lineJoin = "round" ctx.beginPath() ctx.moveTo(points[0], points[1]) for (let i = 2; i < points.length; i += 2) { ctx.lineTo(points[i], points[i + 1]) } ctx.stroke() ctx.scale(1.403619311470477, 1.403619311470477) ctx.beginPath() ctx.moveTo(points[0], points[1]) for (let i = 2; i < points.length; i += 2) { ctx.lineTo(points[i], points[i + 1]) } ctx.stroke() window.scrollBy(0, 400) </script>
复现现象
预期得到无缩放描边的等比缩放版本,但在Chrome 94.0版本中会出现一条从线条中延伸出来的异常射线,效果如下图:
内容的提问来源于stack exchange,提问作者Vladiator
相关产品推荐
相关产品推荐

