SVG中的描边是否可以用作剪切路径的一部分?

4

我正在从MuPDF生成SVG输出,但是我遇到了似乎是SVG能力限制的问题。如果这是已知问题并有已知解决方法(或者我在做一些愚蠢的事情!),我想在这里询问。

我有以下SVG:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="21.59cm" height="27.94cm" viewBox="0 0 600 600">
<path stroke-width="12" fill="none" stroke="#0000ff" d="M 150 300 L 80 300 L 80 370 L 150 370 " />
<clipPath id="cp0">
<path stroke-width="12" fill="none" stroke="#000000" d="M 150 300 L 80 300 L 80 370 L 150 370 " />
</clipPath>
<g clip-path="url(#cp0)">
<rect fill="#ff0000" x="0" y="0" width="600" height="600"/>
</g>
</svg>

这会绘制一个蓝色的描边路径(形状类似于“ [ ”)。然后将相同的路径设置为剪切路径,并使用红色填充剪切路径。

我希望剪切路径设置为路径的描边版本,因此红色形状会完全覆盖蓝色形状。然而,在我的测试中,“路径的填充或描边”被忽略,路径被“填充”,因此我得到了在蓝色形状内部绘制红色正方形的结果。

有没有办法实现我所希望的行为?或者我必须编写代码以手动展平和描边路径,然后将其输出到SVG中?

感谢您提前的回复!

1个回答

4
< p >在SVG中,剪辑路径仅限于形状,而不包括其特征。换句话说,你不会得到描边。但你可以使用蒙版来解决这个问题,将路径的描边设置为白色。

这里有一个示例

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 600 600">
  <defs>
    <mask id="m0" maskUnits="userSpaceOnUse" x="0" y="0" width="600" height="600">
      <path fill="none" stroke="white" stroke-width="5" d="M 150 300 L 80 300 L 80 370 L 150 370" />
    </mask>
  </defs>

  <path stroke-width="12" fill="none" stroke="#0000ff" d="M 150 300 L 80 300 L 80 370 L 150 370 " />
  <g mask="url(#m0)">
    <rect fill="yellow" x="0" y="0" width="600" height="600" />
  </g>
</svg>

当然!我太蠢了,没有想到这个。你说得对,这完全解决了问题。非常感谢! - Robin Watts
这是一个很好的解决方案,但是就我所知,mask 的性能似乎比 clipPath 差得多。我猜测 mask 需要栅格化处理,而 clipPath 则可能是矢量操作。 - user657199

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接