stroke(路径命令)

context.stroke()

使 Path 的周长根据当前 context.strokeStyle 进行描边,并且描边路径可视地绘制到画布上。

在执行 context.stroke(或 context.fill)之前,Path 存在于内存中,并且尚未在画布上以可视方式绘制。

绘制了不寻常的笔画方式

考虑这个示例 Path,它从 [0,5][5,5] 绘制 1 像素黑线:

// draw a 1 pixel black line from [0,5] to [5,5]
context.strokeStyle='black';
context.lineWidth=1;
context.beginPath();
context.moveTo(0,5);
context.lineTo(5,5);
context.stroke();

问题: 浏览器实际在画布上绘制了什么?

你可能希望在 y = 5 时获得 6 个黑色像素

StackOverflow 文档

但是(!)…… Canvas 总是在它定义的路径的两边画中风!

所以,由于这条线是在 y==5.0 定义的,Canvas 想在 y==4.5y==5.5 之间画线

StackOverflow 文档

但是,再次(!)……计算机显示器无法绘制半像素!

那么对于不需要的半像素(以下蓝色显示)应该怎么做?

StackOverflow 文档

答案是 Canvas 实际上命令显示器绘制从 4.06.0 的 2 像素宽线。它还使线条比定义的 black 更轻。这种奇怪的绘图行为是抗锯齿,它有助于 Canvas 避免绘制看起来锯齿状的笔触。

StackOverflow 文档

一种调整技巧,仅适用于完全水平和垂直的笔划

你可以通过指定在半像素上绘制的线来获得 1 像素的纯黑线:

context.moveTo(0,5.5);
context.lineto(5,5.5);

StackOverflow 文档

使用 context.stroke() 在画布上绘制描边路径的示例代码:

StackOverflow 文档

<!doctype html>
<html>
<head>
<style>
    body{ background-color:white; }
    #canvas{border:1px solid red; }
</style>
<script>
window.onload=(function(){

    // canvas related variables
    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    ctx.beginPath();
    ctx.moveTo(50,30);
    ctx.lineTo(75,55);
    ctx.lineTo(25,55);
    ctx.lineTo(50,30);
    ctx.lineWidth=2;
    ctx.stroke();

}); // end window.onload
</script>
</head>
<body>
    <canvas id="canvas" width=100 height=100></canvas>
</body>
</html>