首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在svg滤镜中降低alpha层的不透明度?

如何在svg滤镜中降低alpha层的不透明度?
EN

Stack Overflow用户
提问于 2013-02-14 08:38:49
回答 3查看 15.7K关注 0票数 36

我正在尝试创建一个作为SVG的徽标。我从Illustrator中导出了文件。徽标上有一个阴影。我正在查找XML,发现了filter节点

代码语言:javascript
复制
<filter  filterUnits="objectBoundingBox" width="200%" height="160%" x="-15%" y="-15%" id="AI_Shadow_2">
<feGaussianBlur  stdDeviation="2" result="blur" in="SourceAlpha"></feGaussianBlur>
<feOffset  result="offsetBlurredAlpha" in="blur" dy="0" dx="0"></feOffset>
<feMerge>
    <feMergeNode  in="offsetBlurredAlpha"></feMergeNode>
    <feMergeNode  in="SourceGraphic"></feMergeNode>
</feMerge>

有没有办法改变生成的offsetBlurredAlpha的alpha?我不希望它从纯黑色开始,我希望它从50%的黑色开始,这样阴影效果就会在物体周围足够亮。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-14 17:13:04

一种方法是添加一个feComponentTransfer过滤器原语,如下所示:

代码语言:javascript
复制
<filter id="dropshadow">
  <feGaussianBlur in="SourceAlpha" stdDeviation="3"/> 
  <feOffset dx="2" dy="2"/>
  <feComponentTransfer>
    <feFuncA type="linear" slope="0.2"/>
  </feComponentTransfer>
  <feMerge> 
    <feMergeNode/>
    <feMergeNode in="SourceGraphic"/> 
  </feMerge>
</filter>

一个活生生的例子可以在here上看到。

票数 55
EN

Stack Overflow用户

发布于 2017-08-19 04:00:16

一种方法是简单地使用opacity: 0.5。为此,不是创建将投影与原始源合并在顶部的滤镜,而是为仅投影创建滤镜,并将其应用于引用源形状的<use>标签。

这种方法还有其他优点。例如,现在您可以仅对阴影应用单独的样式。

代码语言:javascript
复制
#arrow-shadow {
	opacity:0.5;
}
g:hover #arrow-shadow {
	opacity:0.7;
}
代码语言:javascript
复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-50 -50 200 200" width="400px">
	<defs>
		<filter id="dropshadow" height="130%">
			<feGaussianBlur in="SourceAlpha" stdDeviation="3" /> 
			<feOffset dx="2" dy="2" result="offsetblur" />
		</filter>
	</defs>
	<g fill="#EEE">
		<use id="arrow-shadow" xlink:href="#polygon" filter="url(#dropshadow)"></use>
		<polygon id="polygon"
				points="58.263,0.056 100,41.85 58.263,83.641 30.662,83.641 62.438,51.866 0,51.866 0,31.611 62.213,31.611 30.605,0 58.263,0.056"/>
		
	</g>
</svg>

票数 8
EN

Stack Overflow用户

发布于 2017-10-17 14:40:03

设置Alpha值的另一种方法是使用feColorMatrix过滤器基元。使用此选项,您可以同时设置alpha值和投影的颜色。

下面的滤镜将Alpha值乘以0.2,同时将投影的颜色设置为红色。

代码语言:javascript
复制
<filter id="dropshadow">
  <feGaussianBlur in="SourceAlpha" stdDeviation="3"/> 
  <feOffset dx="2" dy="2"/>
  <feColorMatrix values="0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
  <feMerge> 
    <feMergeNode/>
    <feMergeNode in="SourceGraphic"/> 
  </feMerge>
</filter>

但是,如果您只需要更改Alpha值,则feComponentTransfer filter原语可能是更好的选择。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14865915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档