svg feComponentTransfer 线性函数

标签 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 过滤器,所以我怀疑我误解了规范。有人可以纠正我吗?

最佳答案

过滤器通常在 linearRGB 颜色空间中工作。这个用例需要 sRGB 所以你只需要设置 color-interpolation-filters过滤器元件上的="sRGB"

关于svg feComponentTransfer 线性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046274/

相关文章:

javascript - 使用 d3 将多个矩形嵌套在多个 svg 容器中?

html - 如何使用 css 或 SVG 创建圆形

css - 参数化和重用 HTML5 中定义的自定义 SVG 过滤器?

svg - 在 SVG 中绘制一个带有阴影的圆圈会剪裁边缘

javascript - D3 v4 饼图更新空 `d` 属性

javascript - Highcharts - 使用选定的饼图切片获得 3d 效果

html - 带有过滤器的 SVG 投影被截断

css - SVG 过滤器使元素在 Safari 和移动版 Chrome 中不可见

css - 如何使用 SVG 滤镜创建模糊的标签背景?

css - 复杂的平行四边形按钮形状