如何在SVG中获得文本的轮廓效果?

cle*_*tus 44 svg

我只想要一个简单的SVG图像,它在一个角度上有一些任意文本,我可以做.事实上,我也希望文本具有某种"轮廓"效果.与固体D不同,字母D的内边缘和外边缘用指定厚度的线条绘制,而D的其余部分根本不绘制,以便看起来几乎"空心".

SVG可以这样做吗?

Ian*_*kus 43

油漆顺序:中风; 在我正在研究的D3图表中为我创造了奇迹.

我的最后一句话:

.name-text {
    font-size:  18px;
    paint-order: stroke;
    stroke: #000000;
    stroke-width: 1px;
    stroke-linecap: butt;
    stroke-linejoin: miter;
    font-weight: 800;
}
Run Code Online (Sandbox Code Playgroud)

我的来源(向下滚动一下):https: //svgwg.org/svg2-draft/painting.html#PaintOrderProperty

  • 谢谢!删除不相关的内容,可以归结为这样的内容:`text {paint-order:描边;描边:黑色;描边宽度:10px;}` (2认同)

Xn0*_*v3r 30

是的,它可以 ;-)

我试图用Inkscape实现这一点,然后编辑了svg-File的源代码.只是不要填充它并使用颜色和宽度的笔划来绘制它.我明白了:

<text x="100" y="100" id="text2383" xml:space="preserve" style="font-size:56px;font-style:normal;font-weight:normal;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans">
<tspan x="100" y="100" id="tspan2385">D</tspan></text>
Run Code Online (Sandbox Code Playgroud)

有趣的部分是"style"属性.

"fill:none;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,inkscape包含的很多样式都是_usually_冗余(因为它们是默认的).对于上面的style属性,你可能会逃脱:`"fill:none; stroke:#000000; stroke-width:1px;"`如果你实际使用黑色,你可能也会省略`stroke:#000000`. (2认同)
  • 虽然您的答案很有帮助,但阅读起来却非常困难。将样式条目分隔在单独的行上确实很有帮助,这样我们就可以真正阅读您想要执行的操作 (2认同)

phk*_*phk 11

您可以使用a <filter>,更具体地说是以下组合<feMorphology>:

<svg style="height:100px;width:100%;background-color:Green">

<defs>
<filter id="whiteOutlineEffect">
  <feMorphology in="SourceAlpha" result="MORPH" operator="dilate" radius="2" />
  <feColorMatrix in="MORPH" result="WHITENED" type="matrix" values="-1 0 0 1 0, 0 -1 0 1 0, 0 0 -1 1 0, 0 0 0 1 0"/>
  <feMerge>
    <feMergeNode in="WHITENED"/>
    <feMergeNode in="SourceGraphic"/>
  </feMerge>
</filter>
</defs>

<g>
  <text x="10" y="50" fill="black" font-size="60" filter="url(#whiteOutlineEffect)">
    Example
  </text>
</g>

</svg>
Run Code Online (Sandbox Code Playgroud)

您可能必须调整滤镜的x/ y/ width/ height属性以适应滤镜画布大小,另请参阅<滤镜>的Humongous高度值,以防止切边边缘处的高斯模糊截止.

我还创建了一个交互式d3.js动力演示来比较这个线程中提供的不同解决方案,并提供各种设置:https://bl.ocks.org/Herst/d5db2d3d1ea51a8ab8740e22ebaa16aa


cod*_*ead 8

SVG中的图形对象可以具有填充(默认为黑色)和笔划(默认情况下为无).如果要在文本上使用红色轮廓,请设置fill ="none"和stroke ="red".您可能还想调整stroke-width属性的值.


Nav*_*Nav 5

此处给出了轮廓和发光的另一个示例:http : //www.w3.org/People/Dean/svg/texteffects/index.html

<svg width="350" height="75" viewBox="0 0 350 75"><title>MultiStroke</title><rect x="0" y="0" width="350" height="75" style="fill: #09f"/><g style="overflow:hidden; text-anchor: middle; font-size:45; font-weight: bold; font-family: Impact"><text x="175" y="55" style="fill: white; stroke: #0f9; stroke-width: 14">
    Stroked Text
    </text><text x="175" y="55" style="fill: white; stroke: #99f; stroke-width: 8">
    Stroked Text
    </text><text x="175" y="55" style="fill: white; stroke: black; stroke-width: 2">
    Stroked Text
    </text></g>
</svg>
Run Code Online (Sandbox Code Playgroud)