如何降低svg过滤器中alpha层的不透明度?

时间:2013-02-14 00:38:49

标签: xml svg adobe-illustrator svg-filters

我正在尝试将徽标创建为SVG。我从Illustrator导出文件。徽标上有一个投影。我正在查看XML,我找到了过滤器节点

<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%黑色开始,以便阴影效果在物体周围足够轻。

3 个答案:

答案 0 :(得分:48)

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

<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

答案 1 :(得分:5)

一种方法是简单地使用opacity: 0.5。要执行此操作,请创建一个仅用于 条形图的过滤器,然后将其应用于引用源的<use>标记,而不是创建一个将幻灯片与原始源合并的过滤器。形状

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

&#13;
&#13;
#arrow-shadow {
	opacity:0.5;
}
g:hover #arrow-shadow {
	opacity:0.7;
}
&#13;
<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>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

设置alpha值的另一种方法是使用feColorMatrix过滤器原语。使用此功能,您可以同时设置Alpha值和投影颜色。

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

<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过滤器原语可能是更好的选择。