SVG 滤镜 feGaussianBlur 需要增强

标签 svg svg-filters

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

<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>

最佳答案

一种稍微优雅的方法是使用 Alpha channel 上的 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>

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

关于SVG 滤镜 feGaussianBlur 需要增强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130850/

相关文章:

svg - 使用 SVG 使用混合过滤器(更具体地说是相乘)

jquery - 如何使用 Snap Svg 触发?

javascript - 无法从具有树布局的力图中调用force.tick()

xml - 在网络中添加 Mimetype 的顺序。配置文件

internet-explorer - 对象不支持此属性或方法

svg - Graphviz dot - HTML 表格中的斜体文本是非斜体

svg - 如何使用 svg 在矩形周围创建 "glow"?

css - 'frosted glass' 效果现在只能用 CSS 实现吗?

css - 来自另一个不可见 SVG 的 SVG 过滤器完全删除了目标

css - 图像灰度 (SVG) 问题