【发布时间】:2019-02-27 03:46:58
【问题描述】:
在 mozilla 的feColorMatrix 文档中声明
SVG 滤镜元素根据 变换矩阵。每个像素的颜色值(由 [R,G,B,A] 向量)与矩阵相乘以创建新颜色。
但是在feColorMatrix 中有 5 列,而不是 4 列。
在可以被视为经典参考的优秀article 中指出:
这里的矩阵实际上是在计算一个最终的 RGBA 值 行,为每个 RGBA 通道提供自己的 RGBA 通道。最后一个数字 是一个乘数。
但这并不能解释很多。据我了解,由于在应用过滤器后,我们基本上完全修改了 R、G、B 和 A 通道,没有其他任何东西,所以不需要这个附加参数。文章本身间接地证明了这一点 - 提供的所有基于 feColorMatrix 的过滤器的众多示例 - 都以零作为第五个组成部分。另外,为什么它是一个乘数?
在另一个著名的article 中说:
对于其他行,您将每个 rgba 输出值创建为 rgba 输入值的总和乘以相应的 矩阵值,加上一个常数。
将其称为常数加法比将其称为乘数更有意义,但仍不清楚 feColor 矩阵中的第五个分量代表什么以及没有它无法实现什么 - 所以这将是我的问题.
我最后的希望是 w3c 参考,但它也是 surprisingly vague。
【问题讨论】:
-
我不像我想的那样精通
feColorMatrix(特别是因为我使用它!)但我的理解是输出是rR + gG + bB + aA + c的函数 - 最后一个value 是一个常数加法。 -
@NiettheDarkAbsol 过滤器是一个从 RGBA 到 RGBA 的函数,即使它是矩阵形式,这基本上意味着拥有 4x4 矩阵可以得到你需要的任何值 - 所以没有任何价值如果没有第五列,您将无法获得-至少据我所知。这有两个目的:1)它只是让一些常见情况的计算更容易 2)这个常数仍然有意义,换句话说,除了 rgba 通道之外,每种颜色都有额外的特征。
-
@shabunc if RGBA = transparent black i.e. 0, 0, 0, 0 如果没有第 5 个值来提供恒定加法,除了透明黑色之外,您将如何制作它?无论如何,整个矩阵乘法是in the SVG specification
-
@RobertLongson 好点!我猜它是关于黑色的。此外,您提供的链接正是我在问题中提供的链接。
-
您可能会发现这支笔很有用:SVG feColorMatrix 您可以编辑 feColorMatrix 的值以查看会发生什么。
标签: svg svg-filters