svg - SVG FeImage 引用的文档元素在最新的 Chrome 中不起作用
问题描述
用例:在“in”模式下使用过滤器 FeImage 和 FeComposite 用填充/渐变/图案/图像填充 SVG 路径或形状。
示例:要使用过滤器用粉红色填充源矩形,请用粉红色填充另一个矩形(放置在 defs 内)。使用 feImage 引用该矩形并将 feImage 的“in”模式 feComposite 放入作为源矩形的 SourceGraphic 中。这在下面的小提琴中得到了证明。
问题:直到最近我将 Chrome 升级到 v93 时,此实现才有效。可以确认此实现在 Safari 和 Chrome v88 中有效。
我尝试过的:我的原始 HTML 很复杂,所以我以最简单的形式创建了一个小提琴。我在 <filter> 上尝试了不同的维度,并在所有元素上尝试了一大堆不同的参数。小提琴 HTML 非常简单,所以没有太多尝试。
观察:当我在开发工具中检查 defs rect 时,chrome 突出显示它位于源 rect 重叠上方的正确位置。但看起来实际渲染发生在 0,0。如果我将矩形慢慢移向 0,0,颜色就会开始出现。要看到这一点,请将两个矩形的 x 和 y 分别更改为 0 和 0。
这是一个显示问题的小提琴。在 Safari 或旧版本的 Chrome 中打开相同的内容。
<html>
<body style="background: black">
<svg
version="1.1"
id="editor_srdXQldLJ3O0111"
width="450"
height="450"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
style="z-index: 1"
>
<defs>
<rect
x="195.64463806152344"
y="31.770639419555664"
width="184.6571807861328"
height="185.97244262695312"
id="fillrect"
fill="pink"
></rect>
<filter
id="main-filter"
x="0"
y="0"
height="100%"
width="100%"
filterUnits="userSpaceOnUse"
color-interpolation-filters="sRGB"
>
<feImage href="#fillrect" result="fe-img"></feImage>
<feComposite
operator="in"
in="fe-img"
in2="SourceGraphic"
></feComposite>
</filter>
</defs>
<g filter="url(#main-filter)">
<rect
x="195.64463806152344"
y="31.770639419555664"
width="184.6571807861328"
height="185.97244262695312"
/>
</g>
</svg>
</body>
</html>
解决方案
推荐阅读
- javascript - 在 VS Code 中运行隔离的 JavaScript 命令(不是当前文件)
- android - 在单个活动应用程序中在片段之间进行通信并用新片段替换片段的正确方法
- javascript - 如何用js中的单个字符替换单个数字和两位数字?
- json - 在使用 try/catch 块时捕获“Test-Json”失败的原因
- javascript - 控制嵌套 React 元素的事件
- node.js - 禁用公共后如何实现 Viber Chatbot
- java - java流一个自定义类
- locust - 蝗虫工人没有连接到主人
- python - Django通过条件计算其成员来注释查询集
- python - 如果不将值对添加到 python 中的列表中,则值对已经存在于列表中