SVG Bézier 曲线总是在浏览器和 PDF 中关闭路径
SVG Bézier's curve always closes path in browser and PDF
我正在用 SVG 中的贝塞尔曲线绘制音乐连线,以便在浏览器中可视化它们并允许导出 pdf。
它工作正常。但是如果你放大你可以看到有一条线连接这两个顶点:我需要去掉那条线。
在 Inkscape 中,该行不存在,但它确实出现在所有浏览器中(尤其是 Chrome),即使它实际上是不可见的。我的问题是,当您将其打印为 PFD(我只需单击 ctrl+P 并保存文件)时,该行会变得更粗,并且音乐 sheet 不能那样发布!
这是我的路径:
<svg height="150px" width="100%"><path d="M 28 39 q 15 29 40 -13 M 28 39 q 15 25 40 -13" stroke="black" stroke-width="0.5" fill="black" fill-rule="evenodd"></path></svg>
请问有什么办法可以解决这个问题吗?
curve in Chrome
curve in pdf export
问题在于您创建形状的方式。
它由两个单独的形状组成,您将它们合并为一条路径。请参阅下面的示例,其中我为两个子路径指定了不同的颜色。
<svg width="400px" viewBox="0 0 70 60">
<path d="M 28 39 q 15 29 40 -13" fill="red" opacity="0.5"/>
<path d="M 28 39 q 15 25 40 -13" fill="green" opacity="0.5"/>
</svg>
注意到两个 sub-paths(红色和绿色)共用一条边的形状顶部了吗?沿着那个边缘实际上有一个非常薄的矩形,由两个 sub-paths 的边缘形成。当路径呈现到屏幕上时,两个形状的绘制方式略有不同,有时会导致沿该边缘的一些像素可见。这可以使那里出现浅灰色线。
这也是您需要将 fill-rule="evenodd"
添加到路径中的原因。就是这样 sub-path 在另一个上打了一个洞。否则它们都会被画成实心的。
<svg width="400px" viewBox="0 0 70 60">
<path d="M 28 39 q 15 29 40 -13 M 28 39 q 15 25 40 -13" fill="black"/>
</svg>
解决方法是确保您的形状只有一条路径。不是两个sub-paths。该路径应绕过形状的边界。从一侧到另一侧,然后沿着另一侧返回。
<svg width="400px" viewBox="0 0 70 60">
<path d="M 28 39 q 15 29 40 -13 q -25 38 -40 13 Z" fill="black"/>
</svg>
所以你的原始 SVG 的固定版本如下:
<svg height="150px" width="100%"><path d="M 28 39 q 15 29 40 -13 q -25 38 -40 13 Z" stroke="black" stroke-width="0.5" fill="black" fill-rule="evenodd"></path></svg>
我正在用 SVG 中的贝塞尔曲线绘制音乐连线,以便在浏览器中可视化它们并允许导出 pdf。 它工作正常。但是如果你放大你可以看到有一条线连接这两个顶点:我需要去掉那条线。 在 Inkscape 中,该行不存在,但它确实出现在所有浏览器中(尤其是 Chrome),即使它实际上是不可见的。我的问题是,当您将其打印为 PFD(我只需单击 ctrl+P 并保存文件)时,该行会变得更粗,并且音乐 sheet 不能那样发布!
这是我的路径:
<svg height="150px" width="100%"><path d="M 28 39 q 15 29 40 -13 M 28 39 q 15 25 40 -13" stroke="black" stroke-width="0.5" fill="black" fill-rule="evenodd"></path></svg>
请问有什么办法可以解决这个问题吗?
curve in Chrome curve in pdf export
问题在于您创建形状的方式。
它由两个单独的形状组成,您将它们合并为一条路径。请参阅下面的示例,其中我为两个子路径指定了不同的颜色。
<svg width="400px" viewBox="0 0 70 60">
<path d="M 28 39 q 15 29 40 -13" fill="red" opacity="0.5"/>
<path d="M 28 39 q 15 25 40 -13" fill="green" opacity="0.5"/>
</svg>
注意到两个 sub-paths(红色和绿色)共用一条边的形状顶部了吗?沿着那个边缘实际上有一个非常薄的矩形,由两个 sub-paths 的边缘形成。当路径呈现到屏幕上时,两个形状的绘制方式略有不同,有时会导致沿该边缘的一些像素可见。这可以使那里出现浅灰色线。
这也是您需要将 fill-rule="evenodd"
添加到路径中的原因。就是这样 sub-path 在另一个上打了一个洞。否则它们都会被画成实心的。
<svg width="400px" viewBox="0 0 70 60">
<path d="M 28 39 q 15 29 40 -13 M 28 39 q 15 25 40 -13" fill="black"/>
</svg>
解决方法是确保您的形状只有一条路径。不是两个sub-paths。该路径应绕过形状的边界。从一侧到另一侧,然后沿着另一侧返回。
<svg width="400px" viewBox="0 0 70 60">
<path d="M 28 39 q 15 29 40 -13 q -25 38 -40 13 Z" fill="black"/>
</svg>
所以你的原始 SVG 的固定版本如下:
<svg height="150px" width="100%"><path d="M 28 39 q 15 29 40 -13 q -25 38 -40 13 Z" stroke="black" stroke-width="0.5" fill="black" fill-rule="evenodd"></path></svg>