3

我想要一个带有白色外发光的黑色文本,以便在彩色地图上可读。这是我以前做的:

<defs>
  <filter id="label-glow">
    <feGaussianBlur stdDeviation="1" />
  </filter>
</defs>
<text stroke="white" stroke-width="5" filter="url(#label-glow)">Harald's Repose</text>
<text>Harald's Repose</text>

我想避免重复文本元素,所以我决定使用 feFlood 创建一个白色矩形,使用 feComposite 创建文本的白色副本,使用 feGaussianBlur 创建模糊,然后使用另一个 feComposite 在顶部添加原始文本这一切。不幸的是,由此产生的外部辉光非常微弱。我发现重复几次 feComposite 会有所帮助。我确信有更好的解决方案。我究竟做错了什么?

<defs>
  <filter id="label-glow">
<feFlood flood-color="white"/>
<feComposite in2="SourceGraphic" operator="in"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite operator="over"/>
<feComposite operator="over"/>
<feComposite operator="over"/>
<feComposite operator="over"/>
<feComposite in="SourceGraphic"/>
  </filter>
</defs>
<text filter="url(#label-glow)">Harald's Repose</text>
4

1 回答 1

3

一种更优雅的方法是使用 alpha 通道上的 feComponentTransfer 来提高发光的不透明度。

<filter id="label-glow">
<feFlood flood-color="white"/>
<feComposite in2="SourceGraphic" operator="in"/>
<feGaussianBlur stdDeviation="2"/>
<feComponentTransfer>
    <feFuncA type="gamma" exponent=".5" amplitude="2"/>
      </feComponentTransfer>
<feComposite in="SourceGraphic"/>
  </filter>

您可以通过更改幅度来调整白色的平均强度,您可以通过更改指数来调整强度衰减。

于 2013-02-28T12:55:01.697 回答