【问题标题】:What does fifth column of feColorMatrix stands for exactlyfeColorMatrix 的第五列到底代表什么
【发布时间】: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


【解决方案1】:

虽然您确实需要了解矩阵数学,但规范很明确。第五列是固定偏移量。这很有用,因为如果您想在输出中添加特定数量的 R/G/B/A,那么该列是唯一的方法。或者,如果您想将某些东西重新着色为特定颜色,这也是这样做的方法。

例如 - 如果您的输入中有多种不透明颜色,但您想将所有内容重新着色为 rgba(255,51,0,1),那么这就是您将使用的矩阵。

0 0 0 0 1.0

0 0 0 0 0.2

0 0 0 0 0

0 0 0 1 0

又名

<feColorMatrix type="matrix" values="0 0 0 0 1   0 0 0 0 0.5   0 0 0 0 0  0 0 0 1 0"/>

自己试试这些滑块: https://codepen.io/mullany/pen/qJCDk

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多