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

フィルターは通常、linearRGB 色空間で機能します。このユース ケースでは 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 に答える