如何在圆圈内包含 feGaussianBlur?
How do I contain feGaussianBlur within a circle?
我试图在一个圆圈内包含一个 feGaussianBlur 以使圆圈的渐变更平滑,但模糊扩展到圆圈之外。
我还在使用另一个渐变,在顶部圆圈后面有一个 feGaussianBlur,它会扩展到它之外,所以我不能在顶部圆圈上使用蒙版来掩盖超出它的颜色渗出,否则模糊它下面的圆圈也会被覆盖。
在这个例子中,我为两个圆和一个矩形添加了渐变。
使用 clip-path 将矩形变成圆形。
第二个圆圈和矩形应用了过滤器。
过滤器具有 feComposite/in 以按照 的建议将过滤器保持在圆圈内:<feComposite operator="in" in2="SourceGraphic"/>
据我所知,没有滤镜的看起来更光滑。所以,我不知道它是否有意义——也许在您的用例中?
<svg width="500" viewBox="0 0 300 110" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="blur">
<feGaussianBlur in="SourceGraphic" stdDeviation="4" />
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<linearGradient id="gradient">
<stop offset="0" stop-color="blue" />
<stop offset="30%" stop-color="blue" />
<stop offset="70%" stop-color="lightblue" />
<stop offset="100%" stop-color="lightblue" />
</linearGradient>
<clipPath id="cp1">
<circle cx="50" cy="50" r="45" />
</clipPath>
</defs>
<circle cx="50" cy="50" r="45" fill="url(#gradient)" />
<text font-size="10" x="50" y="105" text-anchor="middle">circle no filter</text>
<circle cx="150" cy="50" r="45" fill="url(#gradient)" filter="url(#blur)" />
<text font-size="10" x="150" y="105" text-anchor="middle">circle filter</text>
<rect transform="translate(200 0)" width="100" height="100" fill="url(#gradient)" clip-path="url(#cp1)" filter="url(#blur)"/>
<text font-size="10" x="250" y="105" text-anchor="middle">rect filter</text>
</svg>
要对原始图形区域进行模糊处理,请在过滤器末尾添加 feComposite/in。
<feComposite operator="in" in2="SourceGraphic"/>
我试图在一个圆圈内包含一个 feGaussianBlur 以使圆圈的渐变更平滑,但模糊扩展到圆圈之外。
我还在使用另一个渐变,在顶部圆圈后面有一个 feGaussianBlur,它会扩展到它之外,所以我不能在顶部圆圈上使用蒙版来掩盖超出它的颜色渗出,否则模糊它下面的圆圈也会被覆盖。
在这个例子中,我为两个圆和一个矩形添加了渐变。
使用 clip-path 将矩形变成圆形。
第二个圆圈和矩形应用了过滤器。
过滤器具有 feComposite/in 以按照 <feComposite operator="in" in2="SourceGraphic"/>
据我所知,没有滤镜的看起来更光滑。所以,我不知道它是否有意义——也许在您的用例中?
<svg width="500" viewBox="0 0 300 110" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="blur">
<feGaussianBlur in="SourceGraphic" stdDeviation="4" />
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<linearGradient id="gradient">
<stop offset="0" stop-color="blue" />
<stop offset="30%" stop-color="blue" />
<stop offset="70%" stop-color="lightblue" />
<stop offset="100%" stop-color="lightblue" />
</linearGradient>
<clipPath id="cp1">
<circle cx="50" cy="50" r="45" />
</clipPath>
</defs>
<circle cx="50" cy="50" r="45" fill="url(#gradient)" />
<text font-size="10" x="50" y="105" text-anchor="middle">circle no filter</text>
<circle cx="150" cy="50" r="45" fill="url(#gradient)" filter="url(#blur)" />
<text font-size="10" x="150" y="105" text-anchor="middle">circle filter</text>
<rect transform="translate(200 0)" width="100" height="100" fill="url(#gradient)" clip-path="url(#cp1)" filter="url(#blur)"/>
<text font-size="10" x="250" y="105" text-anchor="middle">rect filter</text>
</svg>
要对原始图形区域进行模糊处理,请在过滤器末尾添加 feComposite/in。
<feComposite operator="in" in2="SourceGraphic"/>