Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有radialGradient的SVG - mask feGaussianBlur

带有radialGradient的SVG - mask feGaussianBlur
EN

Stack Overflow用户
提问于 2021-11-14 15:10:39
回答 1查看 112关注 0票数 2

我想要模糊图像的边角,同时保留清晰的中心。使用css backdrop-blur()是不可能的,因为Firefox不支持它。在模糊的图像上添加一个清晰的图像,然后遮蔽第一个图像也是不可行的,因为最后我想用一个three.js场景来改变静态图像。

我试图跟随this tutorial,但使用的是径向渐变,而不是固定的条形图。

代码语言:javascript
运行
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
      <defs>
        <filter id="blurlayer" width="100%" height="100%">
            
          <feGaussianBlur stdDeviation="4" result="blur"/>
            
          <radialGradient id="radialGradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%" result="mask">
            <stop offset="0%" stop-color="white" stop-opacity="1" />
            <stop offset="100%" stop-color="black" stop-opacity="0" />
          </radialGradient>
            
          <feComposite in="blur" in2="mask" operator="in" result="comp" />
            
          <feMerge result="merge">
            <feMergeNode in="SourceGraphic" />
            <feMergeNode in="comp" />
          </feMerge> 
        </filter>
      </defs>

      <image filter="url(#blurlayer)" x="0" y="0" width="100%" height="100%"   xlink:href="https://www.wildtextures.com/wp-content/uploads/wildtextures-grey-felt-texture.jpg"/>
    </svg>

它不起作用。有人能帮我找出原因吗?我设置了一个codepen,如果对任何人有帮助的话。

编辑:虽然答案有效,但现在我已经实现了它,我想警告其他所有人:在火狐上,这会使我的Three.js场景变得缓慢(尽管我测试的所有其他浏览器似乎都很好)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-15 03:44:42

你还需要做更多的工作--你不能把滤镜放在滤镜中间--滤镜内部只允许有滤镜原语,而且你需要通过feImage导入任何你想要使用的图像/形状。

此外,当通过feComposite/in进行遮罩时- "in“操作符仅使用alpha通道(与使用亮度的实际遮罩不同)-因此您可以使用具有可变不透明度的黑色/黑色渐变。

最后,因为火狐不支持feImage内部的片段标识符,如果你想要FF支持,你必须在内容中定义你的掩码,并通过feImage导入你想要使用的图像。这使得过滤器不能重用,但如果这是一次关闭内容,这是很好的。如果您确实希望更广泛地使用此过滤器,那么可以定义一个渐变填充的矩形,然后将其转换为完整的SVG图像,然后通过feImage中的data:uri内联该图像。这是更多的工作(我似乎总是得到错误的svg+xml数据URI的转义规则)-所以我没有在这里做。

FWIW -该教程既完整又正确。

代码语言:javascript
运行
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
      <defs>
        
        <radialGradient id="radialGradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%" result="mask">
            <stop offset="0%" stop-color="black" stop-opacity="1" />
            <stop offset="100%" stop-color="black" stop-opacity="0" />
        </radialGradient>
            
        
        <filter id="blurlayer" x="0%" y="0%" width="100%" height="100%">
          <feImage xlink:href="https://www.wildtextures.com/wp-content/uploads/wildtextures-grey-felt-texture.jpg" width="100%" height="100%" result="original-image" preserveAspectRatio="none"/>         
          <feComposite in="original-image" in2="SourceGraphic" operator="in" result="unblurred" />  
          
     <feGaussianBlur in="original-image" stdDeviation="4" result="blurred-image"/>
          <feComponentTransfer in="SourceGraphic" result="invertlight">
                <feFuncA type="table" tableValues="1 0"/>
          </feComponentTransfer>
          <feComposite in="blurred-image" operator="in"/>
          
          <feComposite operator="over" in="unblurred"/>
        </filter>
      </defs>
  
<g filter="url(#blurlayer)">
      <rect fill="url(#radialGradient)" x="0" y="0" width="100%" height="100%"/>
</g>
    </svg>

更新:这是data:uri版本的样子:(请注意,我必须稍微扩大过滤内容的大小,以便过滤器可以裁剪反转导致的边缘工件)。

代码语言:javascript
运行
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%">
      <defs>        
        <filter id="blurlayer" x="0%" y="0%" width="100%" height="100%">
          <feImage xlink:href='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHg9IjAiIHk9IjAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIj48ZGVmcz4gICAgICAgIDxyYWRpYWxHcmFkaWVudCBpZD0ibXlHcmFkaWVudCIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iNTAlIiBmeD0iNTAlIiBmeT0iNTAlIiByZXN1bHQ9Im1hc2siPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9ImJsYWNrIiBzdG9wLW9wYWNpdHk9IjEiIC8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJibGFjayIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAlIiB5PSIwJSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNteUdyYWRpZW50KSIvPjwvc3ZnPg==' width="100%" height="100%" result="blur-mask" preserveAspectRatio="none"/>
      <feComposite in2="blur-mask" in="SourceGraphic" operator="in" result="unblurred" /> 
     <feGaussianBlur in="SourceGraphic" stdDeviation="4" result="blurred-image"/>
          <feComponentTransfer in="blur-mask" result="invertlight">
             <feFuncA type="table" tableValues="1 0"/>
          </feComponentTransfer>
          <feComposite in="blurred-image" operator="in"/>
          <feComposite operator="over" in="unblurred"/>
      </filter>
</defs>
  
  <g filter="url(#blurlayer)">
      <image xlink:href="https://www.wildtextures.com/wp-content/uploads/wildtextures-grey-felt-texture.jpg" x="-5%" y="-5%" width="110%" height="110%" preserveAspectRatio="none"/> 
</g>
    </svg>

data:uri是这个SVG的base64编码版本。

代码语言:javascript
运行
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0" y="0" viewBox="0 0 100 100" height="100%" width="100%"><defs><radialGradient id="myGradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%" result="mask"><stop offset="0%" stop-color="black" stop-opacity="1" /><stop offset="100%" stop-color="black" stop-opacity="0"/>
</radialGradient></defs><rect x="0%" y="0%" width="100%" height="100%" fill="url(#myGradient)"/></svg>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69967936

复制
相关文章
SVG基础
SVG可缩放矢量图形Scalable Vector Graphics是基于可扩展标记语言XML,用于描述二维矢量图形的一种图形格式。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式,SVG于2003年成为W3C推荐标准。
WindRunnerMax
2020/08/27
2.4K0
SVG图像技术摘要
该公司今天没有,研究了最近流行SVG技术,发现,随着css3不断流行,和浏览器技术的发展,SVG网站将取代大量的图片,成为主流站点图片展示。
全栈程序员站长
2022/07/06
1.3K0
SVG绘制星空效果
主要代码: 代码详见GitHub:https://github.com/toly1994328/svg-night: svg星空 <!DOCTYPE html> <html lang="en">
张风捷特烈
2018/09/26
1.4K0
SVG基础知识
之前有提到过SVG描边动画,可以实现很神奇的手写签名动画效果,当然,理论上可以用来实现任意不规则路径填充动画
ayqy贾杰
2019/06/12
2.1K0
一篇文章带你了解SVG 蒙版(Mask)
SVG蒙版功能可将蒙版应用于SVG形状。蒙版可确定SVG形状的哪些部分可见,以及具有什么透明度。运行效果可以将SVG蒙版视为剪切路径的更高级版本。
前端皮皮
2020/11/26
2K0
一篇文章带你了解SVG 蒙版(Mask)
SVG基础知识速查笔记
svg是指可缩放矢量图形,是用于描述二维矢量图形的一种图形格式。svg使用XML格式来定义图形,除ie8之前版本外,绝不部分浏览器均支持svg,可将svg文本直接嵌入HTML中显示。
前端_AWhile
2019/09/06
2K0
带你轻松打开svg滤镜的大门
本文介绍了SVG滤镜的用法,包括如何定义和使用滤镜、如何给不同的SVG元素添加滤镜、以及通过编程方式控制滤镜等。同时,还介绍了在网页中应用SVG滤镜的方法,包括使用SVG元素、使用CSS滤镜、以及使用JavaScript控制滤镜等。此外,还提供了若干示例和代码片段供参考。
练小习
2017/11/30
1.3K0
SVG绘图高斯模糊滤镜
运用SVG绘图实现一个模糊字体效果,比用CSS的阴影写出来的要好看的多。 实现效果如下: 实现代码如下: <!DOCTYPE html> <html> <head lang="en"> <me
越陌度阡
2020/11/26
6640
SVG绘图高斯模糊滤镜
一篇文章带你了解SVG 阴影
所有互联网的SVG滤镜定义在<defs>元素中。<defs>元素定义短并含有特殊元素(如滤镜)定义<filter>标签用来定义SVG滤镜。
前端进阶者
2021/03/03
9180
一篇文章带你了解SVG 阴影
三种方式:object、embed、mask引用 Svg 并更改样式
方式1:使用Object、embed标签引入 html <div class="item"> <object data="test.svg" type="image/svg+xml"></object> <embed src="test.svg" type="image/svg+xml" /> </div> 更改颜色,大小可通过css处理 .item { overflow: hidden; object,embed { cursor: pointer; filter: dro
White feathe
2022/04/21
1.2K0
带你轻松打开svg滤镜的大门
本文介绍了SVG滤镜的用法,包括模糊、失真、暗角、浮雕等效果,并通过实例进行演示。同时介绍了如何在DOME中自定义属性,以及常见的SVG图像的fallback方案。
练小习
2017/12/29
1.2K0
带你轻松打开svg滤镜的大门
css实现文字颜色渐变
background: -webkit-linear-gradient(…) 为文本元素提供渐变背景。 webkit-text-fill-color: transparent 使用透明颜色填充文本。 webkit-background-clip: text 用文本剪辑背景,用渐变背景作为颜色填充文本。
javascript.shop
2019/09/04
3.6K0
【开源游戏/网络游戏】勇士的战争!
图片演示: 代码摘要: HTML: <div id="preloadScreen" class="preload-screen external-screen"> <div class="cente
用户5997198
2019/12/19
1.6K0
SVG - 基本的SVG属性
SVG - 基本的SVG属性 HTML5学堂:在前一篇文章当中,我们讲解了SVG的基本知识,并且为大家介绍了如何在html文件当中书写SVG代码。今天我们具体讲解SVG的基本属性,如何使用SVG完成线、圆等图形的绘制。 line - 直线 拥有四中基本属性 x1 属性在 x 轴定义线条的开始 y1 属性在 y 轴定义线条的开始 x2 属性在 x 轴定义线条的结束 y2 属性在 y 轴定义线条的结束 demo <line x1 = "20" y1 = "20" x2 = "200" y2 = "180" st
HTML5学堂
2018/03/12
4.1K0
一篇文章带你了解SVG 渐变知识
渐变是一种从一种颜色到另一种颜色的平滑过渡。另外,可以把多个颜色的过渡应用到同一个元素上。
前端皮皮
2020/11/26
1.2K0
一篇文章带你了解SVG 渐变知识
mask
https://developer.mozilla.org/zh-CN/docs/Web/CSS/mask
阿超
2022/12/27
7040
mask
有意思!强大的 SVG 滤镜
想写一篇关于 SVG 滤镜的文章已久,SVG 滤镜的存在,让本来就非常强大的 CSS 如虎添翼。让仅仅使用 CSS/HTML/SVG 创作的效果更上一层楼。题图为袁川老师使用 SVG 滤镜实现的云彩效果 -- CodePen Demo -- Cloud (SVG filter + CSS)。
Sb_Coco
2021/03/30
1.7K0
有意思!强大的 SVG 滤镜
SVG快速入门小白篇
SVG .svg 使用xml语法 <?xml version='10.' standalone='no'> standalone 规定此SVG文件是否是独立的 或者是说含有外部文件的引用 在html中
起名字好难哟
2021/08/30
1.1K3
SVG快速入门小白篇
前端-SVG 实现动态模糊动画效果
今天我们将向大家展示如何制作SVG动态模糊效果,并将其应用于HTML元素的常规JS或CSS动画。
grain先森
2019/03/29
2.5K0
前端-SVG 实现动态模糊动画效果
SVG绘制渐变颜色文字
H5提供了很多有意思的新特性,工作中用的比较少,但是这仍然不能阻碍我们对它的兴趣,先给大家上个图,如果要用CSS来写这个效果,如何才能实现呢?
越陌度阡
2020/11/26
2.2K0
SVG绘制渐变颜色文字

相似问题

SVG filter feGaussianBlur需要提升

10

不支持带有错误@ <feGaussianBlur>的消息导入SVG

12

如何计算svg feGaussianBlur的大小

139

带有radialGradient的SVG在浏览器中不工作

13

SVG feGaussianBlur产生明显的条带和边缘

130
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档