5

SVGfeComponentTransfer线性函数没有像我预期的那样工作。应用于灰度图像的斜率为 -1 和截距为 1 应该反转图像:黑色 -> 白色,白色 -> 黑色,25% 灰色 -> 75% 灰色,50% 灰色不变,等等。

我的期望是基于http://www.w3.org/TR/filter-effects/#feComponentTransferElement,上面写着“C' = 斜率 * C + 截距”,其中“C 是初始组件(例如,'feFuncR') , C' 是重新映射的分量;都在闭区间 [0,1] 中。”。

以下过滤器

<filter id="linear">
  <feComponentTransfer>
    <feFuncR type="linear" slope="-1" intercept="1" />
    <feFuncG type="linear" slope="-1" intercept="1" />
    <feFuncB type="linear" slope="-1" intercept="1" />
  </feComponentTransfer>
</filter>

将黑色映射到白色,将白色映射到黑色,但中间值关闭,例如 50% 灰色映射到 90% 灰色,75% 灰色映射到 98% 灰色。有关简单示例,请参见http://jsfiddle.net/Rpjs2/。我在 Firefox 和 Safari 中得到相同的结果。

这是我第一次尝试 SVG 过滤器,所以我怀疑我误解了规格。有人可以纠正我吗?

4

2 回答 2

5

过滤器通常在线性RGB 颜色空间中工作。此用例需要 sRGB,因此您只需在过滤器元素上设置color-interpolation-filters ="sRGB"

于 2012-12-27T14:25:50.507 回答
0

您可以在原始文件之后使用另一个组件传输来纠正此问题

  <feComponentTransfer>
    <feFuncR type="gamma" offset="0" amplitude="1" exponent="4.84"/>
    <feFuncG type="gamma" offset="0" amplitude="1" exponent="4.84"/>
    <feFuncB type="gamma" offset="0" amplitude="1" exponent="4.84"/>
  </feComponentTransfer>

这将使用 的“双”伽马校正更适当地扩展颜色范围2.2 ^ 2 = 4.84

于 2012-12-31T20:55:27.697 回答