【发布时间】:2018-06-05 04:06:11
【问题描述】:
我有一个带有交互式 SVG 的页面,它在所有浏览器(Firefox、Chrome,甚至 IE/Edge)上看起来都很好,除了 Safari,其中一个 SVG 过滤器影响的所有内容都会变成模糊的糊状物(看起来像是渲染到使用双线性插值放大的低分辨率画布)。
现在这里有一个小测试用例也出现了问题:
<svg>
<defs>
<filter id="filter" y="-100" x="-100" height="300" width="300">
<feGaussianBlur in="SourceAlpha" stdDeviation="3.5"></feGaussianBlur>
<feColorMatrix type="matrix" values="0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0" result="lightenedBlur"></feColorMatrix>
<feMerge>
<feMergeNode in="lightenedBlur"></feMergeNode>
<feMergeNode in="SourceGraphic"></feMergeNode>
</feMerge>
</filter>
</defs>
<g>
<rect x="10" y="10" width="100" height="100" fill="blue" filter="url(#filter)"></rect>
</g>
</svg>
它在 Apple Safari 11(在 OS X 10.13 上)上的外观:
分别与 Google Chrome 和 Mozilla Firefox 进行比较:
在查看other SVG filter demo pages on the web 时,虽然效果显然不存在。不太清楚到底是什么原因造成的。我注意到,过滤区域越大,问题就越明显(通过<filter> 的width/height 属性控制)。
这是一个已知问题吗?在什么情况下会发生?什么是合理的解决方法?
【问题讨论】:
-
您是否注意到两个过滤器原语使用
result="lightenedBlur"? -
@ccprog 改了,没什么区别。
标签: d3.js svg safari mobile-safari svg-filters