带有过滤器,feGaussianBlur和feColorMatrix的iOS / Safari上的SVG凸起

时间:2019-09-01 01:10:52

标签: ios svg safari blur svg-filters

我正在尝试使用svg获得粘糊糊的效果。 Chrome的功能还不错,但在Safari和iOS上看起来很奇怪。这是示例:https://codepen.io/rubenhak/project/editor/ZoBENL

在Chrome上的外观: enter image description here

在Safari / iOS上的外观: enter image description here

问题是,当一个圆圈太远,太小或丢失时,另一个圆圈凸出。在chrome上,这都不是问题。

代码:

    <svg version="1.1" xmlns="http://www.w3.org/2000/svg"
         xmlns:xlink="http://www.w3.org/1999/xlink"
         viewBox="0 0 500 200" width="500" height="200">
      <defs>
        <filter id="goo" color-interpolation-filters="sRGB">
          <feGaussianBlur in="SourceGraphic" stdDeviation="8" result="blur" />
          <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 21 -7" result="cm" />
        </filter>
      </defs>
      <g >
        <circle fill="green" r="15" cx="30" cy="95" />
      </g>
      <g filter="url(#goo)">
        <circle fill="blue" r="30"  cx="80" cy="50" />
        <circle fill="green" r="15" cx="80" cy="95" />
      </g>
      <g filter="url(#goo)">
        <circle fill="blue" r="20"  cx="160" cy="50" />
        <circle fill="green" r="15" cx="160" cy="95" />
      </g>
      <g filter="url(#goo)">
        <circle fill="blue" r="20"  cx="220" cy="60" />
        <circle fill="green" r="15" cx="220" cy="95" />
      </g>
      <g filter="url(#goo)">
        <circle fill="blue" r="20"  cx="300" cy="50" />
        <circle fill="green" r="15" cx="300" cy="95" />
      </g>
      <g filter="url(#goo)">
        <circle fill="blue" r="10"  cx="350" cy="50" />
        <circle fill="green" r="15" cx="350" cy="95" />
      </g>
      <g filter="url(#goo)">
        <circle fill="green" r="15" cx="400" cy="95" />
      </g>
      <g >
        <circle fill="green" r="15" cx="450" cy="95" />
      </g>
    </svg>
  

1 个答案:

答案 0 :(得分:2)

Safari将feGaussianBlur的输出裁剪到默认的过滤器区域,然后再将其交给feColorMatrix。 Chrome不会这么做。您可以通过扩展默认过滤器区域来解决此问题。

<filter id="goo" x="-50%" width="200%" y="-50%" height="200%" color-interpolation-filters="sRGB">