SVG:阴影的颜色

Ole*_*tov 7 svg colors shadow svg-filters

我想在SVG中写一个带红色阴影的简单矩形.我有一个简单的过滤器:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1012" height="400">
  <title>svg arrow with dropshadow</title>
  <desc>An svg example of an arrow shape with a dropshadow filter applied. The dropshadow filter effect uses feGaussianBlur, feOffset and feMerge.</desc>
  <defs>
    <filter id="dropshadow" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
     <feComponentTransfer in="SourceAlpha">
         <feFuncR type="discrete" tableValues="1"/>
         <feFuncG type="discrete" tableValues="0"/>
         <feFuncB type="discrete" tableValues="0"/>
     </feComponentTransfer>
     <feGaussianBlur stdDeviation="2"/>
     <feOffset dx="0" dy="0" result="shadow"/>
     <feComposite in="SourceGraphic" in2="shadow" operator="over"/>
   </filter>
  </defs>
  <rect rx="2" ry="2" fill="rgb(255,255,255)" x="5.25" y="5.25" width="141" height="50" fill-opacity="0.85" filter="url(#dropshadow)">
</svg>
Run Code Online (Sandbox Code Playgroud)

为什么在这个例子中阴影颜色不是红色?我哪里不好?

小智 24

对于那些寻找通用解决方案的人来说,这对我来说是一个元素:

<feGaussianBlur in="SourceAlpha" stdDeviation="1.7" result="blur"/>
<feOffset in="blur" dx="3" dy="3" result="offsetBlur"/>
<feFlood flood-color="#3D4574" flood-opacity="0.5" result="offsetColor"/>
<feComposite in="offsetColor" in2="offsetBlur" operator="in" result="offsetBlur"/>
Run Code Online (Sandbox Code Playgroud)


Phr*_*ogz 9

  1. 您提供了无效的SVG - 您需要关闭您的<rect>元素.

  2. 您的示例(已修复)在Chrome中为我显示了一个红色阴影.以下是使用Chrome v15时此网址的内容:

    有红色边界和shaodw的一个浅粉红色的箱子

您看到的OS /浏览器/版本有哪些不同的结果?

编辑:在Firefox v7中我看到所有灰度,在Safari v5中我根本看不到阴影效果.您的答案很可能就是您在浏览器/版本中进行测试,并且不完全支持SVG过滤器规范.

  • 由于http://www.w3.org/TR/SVG11/filters.html#SourceAlpha,我认为它不会产生红色.SourceAlpha - >隐式黑色(#000)+ alpha.如果用`in ="SourceGraphic"替换`in ="SourceAlpha"`,它在Opera和Chrome中都有效. (2认同)