svg feComponentTransfer线性函数

时间:2012-12-26 21:07:44

标签: svg svg-filters

SVG feComponentTransfer线性函数无法正常工作。施加到灰度图像的-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过滤器,所以我怀疑我误解了这些规格。有人可以纠正我吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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的“双重”伽马校正更适当地展开颜色范围。