フィルター効果モジュール レベル 1

W3C 作業草案、

このバージョン:
https://www.w3.org/TR/2018/WD-filter-effects-1-20181218/
最新の公開バージョン:
https://www.w3.org/TR/filter-effects-1/
編集者草案:
https://drafts.fxtf.org/filter-effects-1/
以前のバージョン:
テストスイート:
http://test.csswg.org/suites/filter-effects/nightly-unstable/
課題の追跡:
仕様内にインライン表示
GitHub の課題
編集者:
(Adobe Inc.)
(Apple Inc.)
以前の編集者:
Vincent Hardy
(招待 専門家)
この仕様の編集を提案:
GitHub エディター

概要

フィルター効果とは、要素のレンダリング結果が文書に表示される前に処理する方法である。 通常、CSS または SVG による要素のレンダリングは、子要素を含む要素がバッファー(ラスター画像など)に 描画され、その後、そのバッファーが要素の親に合成されるものとして概念的に説明できる。フィルターは合成段階の前に効果を適用する。このような効果の例には、 ぼかし、色の強度の変更、および画像の変形がある。

フィルター効果は、もともと SVG で使用するために設計されたものだが、画像 バッファーに適用する一連の操作であるため、CSS を含むほぼあらゆる表示環境に適用できる。これらは、 スタイル命令(filter プロパティ)によって起動される。この仕様では、 HTML や SVG など、CSS によってスタイル設定されたコンテンツで使用できるようにフィルターを記述する。また、CSS <image> 値を生成する CSS プロパティ値 関数も定義する。

CSS は、構造化文書 (HTML や XML など)の画面、紙などにおけるレンダリングを記述するための言語である。

この文書のステータス

この節では、この文書の公開時点におけるステータスについて説明する。 他の文書がこの文書に取って代わる場合がある。現在の W3C 公開文書の一覧および この技術報告書の最新改訂版は、https://www.w3.org/TR/ にある W3C 技術報告書 インデックスで確認できる。

作業草案としての公開は、W3C メンバーによる承認を意味するものではない。これは草案文書であり、いつでも他の文書によって更新、置換、または 廃止される可能性がある。この文書を進行中の作業以外のものとして引用することは 適切ではない。

この仕様に関する議論には、GitHub の課題を使用することが推奨される。 課題を提出する場合は、タイトルに「filter-effects」というテキストを含め、 できれば次のようにすること: 「[filter-effects] …コメントの概要…」。 すべての課題とコメントはアーカイブされており、 過去のアーカイブも存在する。

この文書は、スタイル活動の一部である CSS ワーキンググループによって作成された。

この文書は、W3C 特許方針の下で活動するグループによって作成された。 W3C は、グループの成果物に関連して行われた特許開示の 公開一覧を維持しており、そのページには 特許を開示するための手順も記載されている。個人が、必須 クレームを含むとその個人が考える特許について実際に 知っている場合、その情報をW3C 特許方針の第 6 節に従って開示しなければならない。

この文書は、2018年2月1日版 W3C プロセス文書に準拠する。

1. はじめに

この節は規範的ではない

フィルター効果とは、要素が文書内に描画される際に適用されるグラフィカルな操作である。これは 画像ベースの効果であり、0 個以上の画像を入力として受け取り、効果に固有の複数のパラメーターを使用して、 画像を出力として生成する。出力画像は、元の要素の代わりに文書内にレンダリングされるか、 別のフィルター効果への入力画像として使用されるか、または CSS 画像値として提供される。

フィルター効果の単純な例として「フラッド」がある。これは画像を入力として受け取らないが、 色を定義するパラメーターを持つ。この効果は、指定された色で完全に塗りつぶされた出力画像を生成する。もう少し 複雑な例として「反転」があり、これは単一の画像を入力として受け取り(通常は、要素が 通常その親にレンダリングされる場合の画像)、各ピクセルが反対の色値を持つように 調整する。

フィルター効果は、次の 2 つの複雑さのレベルで公開される:

  1. 名前によって指定される少数の定型フィルター関数。特に強力というわけではないが、これらは 便利で理解しやすく、ぼかしなどの一般的な効果を実現するための単純な方法を提供する。 定型フィルターは [CSS3-ANIMATIONS] によってアニメーション化することもできる。

  2. 全体的な効果を定義する、マークアップで記述された個々のフィルター効果のグラフ。このグラフは 入力に依存せず、その効果を任意のコンテンツに適用できる。このようなグラフは、 個別には単純な効果の組み合わせであっても、グラフ全体として複雑な 効果を生成できる。以下に例を示す。

この例では、画像に <grayscale()> フィルター関数が適用される。
#image {
    filter: grayscale(100%);
}
画像にグレースケールフィルターを適用した例

フィルターなしの画像(左)と、100% のグレースケールフィルターを適用した同じ画像 (右)。

以下に、個々の フィルター効果のグラフの例を示す。
フィルターの例

フィルター処理されたオブジェクトの最初の例。

この例を SVG として表示

上記の例で使用されているフィルター効果を、6 個の各フィルタープリミティブの前の左列に 参照番号を付けて、ここに再掲する:



1
2
3




4
5

6


<filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="200" height="120">
  <desc>3D 照明効果を生成する。</desc>
  <feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/>
  <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/>
  <feSpecularLighting in="blur" surfaceScale="5" specularConstant=".75"
                      specularExponent="20" lighting-color="#bbbbbb"
                      result="specOut">
    <fePointLight x="-5000" y="-10000" z="20000"/>
  </feSpecularLighting>
  <feComposite in="specOut" in2="SourceAlpha" operator="in" result="specOut"/>
  <feComposite in="SourceGraphic" in2="specOut" operator="arithmetic"
               k1="0" k2="1" k3="1" k4="0" result="litPaint"/>
  <feMerge>
    <feMergeNode in="offsetBlur"/>
    <feMergeNode in="litPaint"/>
  </feMerge>
</filter>

次の図は、6 個の各フィルター要素から得られる中間画像の結果を示す:

filters01 - 元のソースグラフィック

ソースグラフィック

filters01 - フィルター要素 1 の適用後

フィルタープリミティブ 1 の適用後

filters01 - フィルター要素 2 の適用後

フィルタープリミティブ 2 の適用後

filters01 - フィルター要素 3 の適用後

フィルタープリミティブ 3 の適用後

filters01 - フィルター要素 4 の適用後

フィルタープリミティブ 4 の適用後

filters01 - フィルター要素 5 の適用後

フィルタープリミティブ 5 の適用後

filters01 - フィルター要素 6 の適用後

フィルタープリミティブ 6 の適用後

  1. フィルタープリミティブ feGaussianBlur は、ソースグラフィックのアルファチャンネルである SourceAlpha を入力として受け取る。 結果は "blur" という名前の一時バッファーに格納される。"blur" は フィルタープリミティブ 2 と 3 の両方への入力として使用されることに注意。

  2. フィルタープリミティブ feOffset はバッファー "blur" を受け取り、その結果を x と y の 両方で正方向に移動し、"offsetBlur" という名前の新しいバッファーを作成する。この効果は ドロップシャドウとなる。

  3. フィルタープリミティブ feSpecularLighting は、バッファー "blur" を 表面の高さのモデルとして使用し、単一の点光源から照明効果を生成する。 結果はバッファー "specOut" に格納される。

  4. フィルタープリミティブ feComposite は、フィルタープリミティブ 3 の結果を元のソースグラフィックのアルファチャンネルでマスクし、中間結果が 元のソースグラフィックより大きくならないようにする。

  5. フィルタープリミティブ feComposite は、鏡面照明の結果を 元のソースグラフィックと合成する。

  6. フィルタープリミティブ feMerge は、2 つのレイヤーを合成する。下側のレイヤーは、 フィルタープリミティブ 2 によるドロップシャドウの結果で構成される。上側のレイヤーは、 フィルタープリミティブ 5 による鏡面照明の結果で構成される。

2. モジュール間の相互作用

この仕様は、適用される要素の視覚的レンダリングに影響を与える一連の CSS プロパティを定義する。これらの効果は、 視覚整形モデル [CSS21] に従って要素のサイズと位置が決定された後に適用される。これらのプロパティの一部の値は、 包含ブロックの作成、および/または 積み重ね コンテキストの作成をもたらす。

合成モデルは SVG 合成モデル [SVG11] に従う。まず任意のフィルター効果が適用され、その後にクリッピング、マスキング、および 不透明度 [CSS3COLOR] が適用される。これらの効果はすべて、 border [CSS3BG] など、その他の CSS 効果の後に適用される。

この仕様の一部のプロパティおよび要素の定義には、SVG 1.1 の実装 [SVG11] が必要である。SVG をサポートしない UA は、 color-interpolation-filtersflood-colorflood-opacitylighting-color プロパティ、および filter 要素、feMergeNode 要素、伝達関数要素、 および フィルタープリミティブ 要素を実装してはならない。

3.

この仕様は、CSS プロパティ 定義規約 [CSS21] に従う。これらの仕様で 定義されていない値の型は、CSS Values and Units Module Level 3 [CSS3VAL] で定義される。

各定義に記載されたプロパティ固有の値に加えて、この 仕様で定義されるすべてのプロパティは、プロパティ値として inherit キーワードも受け入れる。 読みやすさのため、明示的には繰り返し記載していない。

4. 用語

この仕様で使用される場合、用語はこの節で割り当てられた意味を持つ。

フィルター プリミティブ, filter-primitive

filter 要素の出力を制御する要素の集合。具体的には、feSpotLightfeBlendfeColorMatrixfeComponentTransferfeCompositefeConvolveMatrixfeDiffuseLightingfeDisplacementMapfeDropShadowfeFloodfeGaussianBlurfeImagefeMergefeMorphologyfeOffsetfeSpecularLightingfeTilefeTurbulence

パススルー フィルター

パススルーフィルターの出力は、フィルタープリミティブの主入力と等しい。

5. グラフィックフィルター: filter プロパティ

filter プロパティの説明は次のとおりである:

名前: filter
値: none | <filter-value-list>
初期値: none
適用対象: すべての要素。SVG では、コンテナー要素のうち defs 要素を除くもの、すべての グラフィックス要素、および use 要素に適用される。
継承: しない
パーセンテージ: 該当なし
算出値: 指定どおり
正規順序: 文法に従う
メディア: 視覚
アニメーション可能: フィルターのアニメーションの本文を参照。
<filter-value-list> = [ <filter-function> | <url> ]+
<url>

filter 要素へのフィルター参照。たとえば url(commonfilters.svg#filter)。フィルターが存在しないオブジェクトを参照している場合、 または参照先のオブジェクトが filter 要素でない場合、 フィルターチェーン全体は無視される。オブジェクトにはフィルターが適用されない。

<filter-function>

フィルター関数を参照。

none

フィルター効果は適用されない。

filter プロパティに none 以外の値を指定すると、絶対配置および固定配置された子孫のための 包含ブロックが作成される。ただし、 それが適用される要素が現在の 閲覧コンテキストにおける文書のルート要素である場合を除く。関数のリストは、 指定された順序で適用される。

リスト内の最初のフィルター関数または filter 参照は、要素(SourceGraphic)を入力画像として受け取る。それ以降の操作は、 直前のフィルター関数または filter 参照の出力を入力画像として受け取る。filter 要素参照 関数は別の入力を指定できるが、それでも前の出力を自身の SourceGraphic として使用する。

color-interpolation-filters は フィルター関数には影響しない。フィルター関数は sRGB 色空間で動作しなければならない。

none 以外の算出値は、CSS の opacity と同じ方法で 積み重ねコンテキスト [CSS21] の作成をもたらす。 要素のすべての子孫はグループとしてまとめてレンダリングされ、フィルター効果はグループ全体に 適用される。

filter プロパティは、filter によって 要素のボーダーボックスの外側に描画が発生する場合でも、対象要素の CSS ボックスの幾何形状には影響しない。

概念上、描画のすべての部分がフィルター操作の影響を受ける。これには、フィルターが 適用される要素およびその子孫の、すべてのコンテンツ、背景、境界線、テキスト装飾、アウトライン、および可視のスクロール機構が含まれる。 フィルター操作は、要素の ローカル座標系で適用される。

合成モデルは SVG 合成モデル [SVG11] に従う。まずフィルター 効果が適用され、その後にクリッピング、マスキング、および不透明度が適用される。SVG と同様に、filter の適用はヒットテストに影響しない。

filter プロパティは、SVG 要素の プレゼンテーション 属性である。

固定された背景画像に対して filter はどのように動作するのか? <https://github.com/w3c/csswg-drafts/issues/238>

6. フィルター関数

6.1. サポートされるフィルター関数

<filter-function> = <blur()> | <brightness()> | <contrast()> | <drop-shadow()> |    
<grayscale()> | <hue-rotate()> | <invert()> | <opacity()> | <sepia()> | <saturate()>

別途定義されていない限り、省略された値は、補間用の 初期 値を既定値とする。

注: 一部のフィルター関数では、省略された値の既定値が、 補間用の 初期値と異なる。コンテンツ 作成者の利便性のため、<grayscale()><sepia()>、および <invert()> で省略された値の既定値は 1(効果を 100% 適用)である一方、補間用の 初期値0(効果なし)である。

blur() = blur( <length>? )

入力画像にガウスぼかしを適用する。渡されたパラメーターは、ガウス関数の標準 偏差の値を定義する。パラメーターは CSS の長さとして指定されるが、 パーセンテージ値は受け付けない。この関数に相当するマークアップは以下に 示す

負の値は許可されない。

省略時の既定値は 0px

補間用の 初期値0px

注: 標準偏差は box-shadow のぼかし半径とは異なる。

brightness() = brightness( <number-percentage>? )

入力画像に線形乗数を適用し、より明るくまたは暗く見えるようにする。0% の値は完全に黒い画像を作成する。100% の値では入力は変更されない。その他の値は効果に対する線形乗数となる。 100% を超える量の値も許可され、より明るい結果をもたらす。この関数に相当するマークアップは 以下に示す

負の値は許可されない。

省略時の既定値は 1

補間用の 初期値1

contrast() = contrast( <number-percentage>? )

入力のコントラストを調整する。0% の値は 完全に灰色の画像を作成する。100% の値では入力は変更されない。 100% を超える量の値も許可され、より高いコントラストの結果をもたらす。この 関数に相当するマークアップは以下に示す

負の値は許可されない。

省略時の既定値は 1

補間用の 初期値1

drop-shadow() = drop-shadow( <color>? && <length>{2,3} )

入力画像にドロップシャドウ効果を適用する。ドロップシャドウは実質的に、入力画像のアルファマスクを ぼかしてオフセットし、特定の色で描画したものを画像の下に合成したものである。 値は box-shadow [CSS3BG] と同様に解釈されるが、任意の 3 番目の <length> 値はぼかし半径ではなく標準偏差となる。この関数に相当するマークアップは 以下に示す

省略された値の既定値は、欠けている長さ値を 0 に設定し、 欠けている使用色は color プロパティから取得する。

補間用の 初期値は、すべての長さ値を 0 に設定し、使用色を transparent に設定したものとなる。

注: このレベルの仕様では、 拡散値または複数の影は受け付けない。

注: 標準偏差は box-shadow のぼかし半径とは異なる。

grayscale() = grayscale( <number-percentage>? )

入力画像をグレースケールに変換する。渡されたパラメーターは変換の割合を定義する。 100% の値では完全にグレースケールになる。0% の値では入力は変更されない。0% から 100% の間の値は効果に対する線形乗数となる。100% を超える量の値も許可されるが、UA は値を 1 にクランプしなければならない。 この関数に相当するマークアップは以下に示す

負の値は許可されない。

省略時の既定値は 1

補間用の 初期値0

hue-rotate() = hue-rotate( [ <angle> | <zero> ]? )

入力画像に色相回転を適用する。渡されたパラメーターは、入力サンプルが 色相環に沿って調整される度数を定義する。0deg の値では 入力は変更されない。360deg を超えるアニメーションを可能にするため、 実装はこの値を正規化してはならない。この関数に相当するマークアップは以下に示す

<angle> がゼロの場合、単位識別子を省略してもよい。

省略時の既定値は 0deg

補間用の 初期値0deg

invert() = invert( <number-percentage>? )

入力画像内のサンプルを反転する。渡されたパラメーターは 変換の割合を定義する。100% の値では完全に反転する。0% の値では 入力は変更されない。0% から 100% の間の値は効果に対する線形乗数となる。100% を超える量の値も 許可されるが、UA は値を 1 にクランプしなければならない。この 関数に相当するマークアップは以下に示す

負の値は許可されない。

省略時の既定値は 1

補間用の 初期値0

opacity() = opacity( <number-percentage>? )

入力画像内のサンプルに透明度を適用する。渡されたパラメーターは 変換の割合を定義する。0% の値では完全に透明になる。100% の値では入力は変更されない。0% から 100% の間の値は効果に対する線形乗数となる。これは、 入力画像のサンプルに量を乗算することと等価である。100% を超える量の値も 許可されるが、UA は値を 1 にクランプしなければならない。この関数に相当するマークアップは 以下に示す

負の値は許可されない。

省略時の既定値は 1

補間用の 初期値1

注: opacity フィルター関数は、 opacity プロパティの 略記を意図したものではない。さらに、次のフィルタープリミティブに渡す前に、中間フィルタープリミティブの結果の 透明度を設定できる。opacity フィルター関数が最後のフィルタープリミティブとして設定された場合、opacity プロパティの値は フィルター関数の値にさらに乗算され、コンテンツがより透明になる可能性がある。

saturate() = saturate( <number-percentage>? )

入力画像の彩度を調整する。渡されたパラメーターは変換の割合を定義する。0% の値では完全に彩度が失われる。100% の値では入力は変更されない。その他の値は効果に対する線形乗数となる。100% を超える 量の値も許可され、過飽和の結果をもたらす。この関数に相当するマークアップは 以下に示す

負の値は許可されない。

省略時の既定値は 1

補間用の 初期値1

sepia() = sepia( <number-percentage>? )

入力画像をセピアに変換する。渡されたパラメーターは変換の割合を定義する。100% の値では完全にセピアになる。0% の値では入力は変更されない。0% から 100% の間の値は効果に対する線形乗数となる。100% を超える量の値も許可されるが、UA は値を 1 にクランプしなければならない。この関数に相当するマークアップは以下に 示す

負の値は許可されない。

省略時の既定値は 1

補間用の 初期値0

6.2. フィルター関数の算出値

<filter-function> 内の値は、次の 例外を除き、指定どおりに算出される:

6.3. フィルター関数の直列化

<filter-function> を直列化するには、各 文法が記述されている順序で、それぞれの文法に従って直列化し、可能な場合は <calc()> 式を避け、指定どおりにフィルター引数を直列化し、 <calc()> 変換を避け、 空白で区切られたトークンを単一の空白で結合し、直列化された各コンマの後に単一の空白を置く。

6.4. フィルター関数の補間

<filter-function> 内の値を補間する場合、 次のリストで最初に一致する条件に対応する手順を実行しなければならない:

<blur()>

値を長さとして、算出値によって補間する。

<brightness()>
<contrast()>
<grayscale()>
<invert()>
<opacity()>
<saturate()>
<sepia()>

パーセンテージ値を数値に変換し、0% を 0、100% を 1 に対応させる。値を 数値として、算出 値によって補間する。

<hue-rotate()>

値を数値として、算出値によって補間する。

<drop-shadow()>

値をシャドウリストとして、反復可能リストとして補間する。

7. SVG フィルターソース: filter 要素

名前: filter
カテゴリー: なし。
コンテンツモデル: 次の要素を任意の数、任意の順序で:
属性:
DOM インターフェイス: SVGFilterElement

filter 要素の説明は次のとおりである:

<number-optional-number> = <number> <number>?

属性の定義:

filterUnits = "userSpaceOnUse | objectBoundingBox"

フィルター領域を参照。

primitiveUnits = "userSpaceOnUse | objectBoundingBox"

フィルタープリミティブ内の各種長さ値、および フィルタープリミティブ部分領域を定義する属性の座標系を指定する。

primitiveUnitsuserSpaceOnUse と等しい場合、フィルター定義内のすべての長さ値は、 filter 要素が参照された時点で有効な現在の ローカル座標系の値を表す(すなわち、filter プロパティを介して filter 要素を参照する要素のユーザー座標系)。

primitiveUnitsobjectBoundingBox と等しい場合、 フィルター定義内のすべての長さ値は、参照元要素のバウンディングボックスの分数またはパーセンテージを表す (オブジェクトバウンディングボックス単位を参照)。<number-optional-number> 値で数値が 1 つだけ 指定された場合、その数値は primitiveUnits の計算が行われる前に 展開されることに注意。

primitiveUnits初期値userSpaceOnUse である。

アニメーション可能: はい。

x = "<length-percentage>"

フィルター領域を参照。

y = "<length-percentage>"

フィルター領域を参照。

width = "<length-percentage>"

フィルター領域を参照。

height = "<length-percentage>"

フィルター領域を参照。

filterRes = "<number-optional-number>"

filterRes 属性は仕様から削除された。定義については SVG 1.1 仕様 [SVG11] を参照。

プロパティは祖先から filter 要素へ継承されるが、filter 要素を参照する要素からは 継承されない

filter 要素は 直接レンダリングされることはなく、唯一の用途は filter プロパティを使って参照できるものとして使用することである。display プロパティは filter 要素には適用されない。したがって、filter 要素は、display プロパティが none 以外の値に設定されていても直接レンダリングされず、filter 要素は、 display プロパティが filter 要素またはその祖先のいずれかで none に設定されている場合でも参照可能である。

8. フィルター領域

filter 要素は、 指定されたフィルター効果が適用されるキャンバス上の フィルター 領域を定義でき、ラスター方式の フィルタープリミティブの処理に使用される 中間連続階調画像の解像度を提供できる。filter 要素には、フィルター領域を定義するために連携して機能する次の属性がある:

filterUnits

属性 xywidthheight の座標系を定義する。

filterUnitsuserSpaceOnUse と等しい場合、xywidthheight は、filter 要素が参照された時点で有効な現在のユーザー座標系の値を表す(すなわち、filter プロパティを介して filter 要素を参照する要素のユーザー座標系)。

filterUnitsobjectBoundingBox と等しい場合、xywidthheight は参照元要素のバウンディングボックスの分数またはパーセンテージを表す(オブジェクトバウンディングボックス単位を参照)。

filterUnits初期値objectBoundingBox である。

アニメーション可能: はい。

x, y, width, height

これらの属性は、このフィルターが適用されるキャンバス上の矩形領域を定義する。

これらの属性の座標系は、属性 filterUnits の値に依存する。

この矩形の境界は、指定された filter 要素に含まれる各 フィルタープリミティブに対して強制的なクリッピング領域として機能する。したがって、指定されたフィルター プリミティブの効果が矩形の境界を超えて広がる場合(これは非常に大きな stdDeviation を持つ feGaussianBlur フィルタープリミティブを使用するときに起こることがある)、 効果の一部はクリップされる。

x および y初期値-10%

width および height初期値120%

フィルターを参照した要素の ng。

アニメーション可能: はい。

注: filterUnits の 2 つの可能な値(すなわち、objectBoundingBox および userSpaceOnUse)はいずれも、フィルターが 適用される要素の ローカル座標系の X 軸および Y 軸にそれぞれ平行な X 軸と Y 軸を持つ座標系の フィルター領域を生成する。

注: フィルター領域をデバイスピクセルに直接マッピングできる場合、 実装者がより高速な性能を実現できることがある。したがって、表示デバイスで最高の性能を得るため、 ユーザーエージェントが フィルター領域を背景とピクセル単位で位置合わせできるように領域を定義することが作者に推奨される。 特に、最良のフィルター効果性能を得るため、ユーザー座標系の回転やスキューを避けること。

注: フィルター効果は、指定されたオブジェクトにぴったり合う バウンディングボックスの わずかに外側の部分にも影響する可能性があるため、余白を設ける必要があることが多い。この目的のため、xy には負のパーセンテージ値を、 widthheight には 100% を超えるパーセンテージ値を指定できる。 たとえば、これがフィルター領域の既定値が x="-10%" y="-10%" width="120%" height="120%" である理由である。

9. フィルタープリミティブ

9.1. 概要

この節では、特定のフィルター効果を実現するために組み合わせることのできる各種フィルタープリミティブについて説明する。

別途記載されていない限り、すべての画像フィルターは乗算済み RGBA サンプルに対して動作する。feColorMatrixfeComponentTransfer などの一部のフィルターは、 非乗算データに対してより自然に動作する。フィルター操作中は、すべての色値を 現在のフィルターが必要とする色の乗算形式へ一時的に変換しなければならない。

注: すべての入力画像は乗算済み RGBA であると仮定される。ユーザー エージェントは、非乗算データのバッファリングを使用して性能を最適化してもよい。

すべてのラスター効果フィルタリング操作は、1 から N 個の入力 RGBA 画像と、パラメーターとして追加の属性を受け取り、 単一の出力 RGBA 画像を生成する。

各フィルタープリミティブから得られる RGBA 結果は、色および不透明度 値の許容範囲内にクランプされる。したがって、たとえば、指定された フィルタープリミティブの結果に負の色値または不透明度 値が含まれる場合、それらは色/不透明度ゼロまで引き上げられる。

特定の フィルタープリミティブが操作を実行する色空間は、その フィルタープリミティブ上のプロパティ color-interpolation-filters の値によって決定される。別のプロパティである color-interpolation は、その他の 色操作の色空間を決定する。これら 2 つのプロパティは異なる初期値を持つため(color-interpolation-filters の初期値は linearRGB である一方、color-interpolation の初期値は sRGB である)、特定の結果を得るためには (たとえば、グラデーション補間をフィルタリング操作と連携させる場合)、特定の要素で color-interpolationlinearRGB に、または color-interpolation-filterssRGB に明示的に設定する必要がある場合がある。 以下の例では color-interpolationcolor-interpolation-filters も明示的には設定していないため、 これらのプロパティの初期値が例に適用されることに注意。

フィルター プリミティブによって未定義のピクセルが生成されることがある。たとえば、フィルタープリミティブ feOffset は画像を下および 右へ移動させ、上部および左側に未定義のピクセルを残すことがある。この場合、未定義のピクセルは 透明な黒に設定される。

高品質なレンダリングを提供するため、すべてのフィルタープリミティブは、デバイスピクセル密度、ユーザー 空間変換、およびズームを考慮したデバイス依存の座標空間である 動作座標空間で動作すべきである。プラットフォームに依存しない位置合わせを提供するため、属性および プロパティ値は、多くの場合 primitiveUnits 属性によって記述される座標系を基準とする。ユーザーエージェントは、 これらの相対属性およびプロパティを 動作座標空間に合わせてスケーリングしなければならない。

注: 高解像度デバイスでは、primitiveUnits を基準とする属性およびプロパティ値は通常、拡大する必要がある。 プラットフォーム資源が限られている場合、ユーザーエージェントはフィルタープリミティブの解像度を下げてもよい。

注: フィルタープリミティブ feConvolveMatrix および 光源の一部の属性またはプロパティ値は、primitiveUnits 属性で定義された座標空間から 動作座標空間へマッピングできない。

9.2. 共通フィルタープリミティブ属性

次の フィルタープリミティブ属性は、すべてのフィルター プリミティブで使用できる:

属性の定義:

x = "<length-percentage>"

指定された フィルター プリミティブの計算およびレンダリングを制限する部分領域の最小 x 座標。フィルタープリミティブ部分領域を参照。

x初期値0%

アニメーション可能: はい。

y = "<length-percentage>"

指定された フィルター プリミティブの計算およびレンダリングを制限する部分領域の最小 y 座標。フィルタープリミティブ部分領域を参照。

y初期値0%

アニメーション可能: はい。

width = "<length-percentage>"

指定された フィルター プリミティブの計算およびレンダリングを制限する部分領域の幅。フィルタープリミティブ部分領域を参照。

負またはゼロの値は、指定されたフィルタープリミティブの効果を無効にする(すなわち、結果は 透明な黒の画像となる)。

width初期値100%

アニメーション可能: はい。

height = "<length-percentage>"

指定された フィルター プリミティブの計算およびレンダリングを制限する部分領域の高さ。フィルタープリミティブ部分領域を参照。

負またはゼロの値は、指定されたフィルタープリミティブの効果を無効にしなければならない(すなわち、結果は 透明な黒の画像となる)。

height初期値100%

アニメーション可能: はい。

result = "<filter-primitive-reference>"

<filter-primitive-reference><custom-ident> [CSS3VAL] であり、この フィルタープリミティブに割り当てられた名前である。指定された場合、 この フィルター プリミティブの処理によって得られるグラフィックスは、同じ filter 要素内の後続のフィルタープリミティブにある in 属性によって参照できる。値が指定されていない場合、 出力は、その フィルタープリミティブin 属性に値が指定されていないときに限り、次の フィルタープリミティブへの暗黙の入力としてのみ再利用できる。

ほとんどのフィルタープリミティブは、他のフィルタープリミティブを入力として受け取る。次の属性は、 他のフィルタープリミティブを参照するすべての入力属性を代表するものである:

属性の定義:

in = "SourceGraphic | SourceAlpha | BackgroundImage | BackgroundAlpha | FillPaint | StrokePaint | <filter-primitive-reference>"

指定されたフィルタープリミティブの入力を識別する。値は 6 つのキーワードのいずれか、または 同じ filter 要素内の先行する result 属性値と一致する文字列のいずれかである。値が指定されず、これが最初の フィルタープリミティブである場合、この フィルタープリミティブSourceGraphic を入力として使用する。値が指定されず、 これが後続の フィルタープリミティブである場合、 この フィルタープリミティブは直前の フィルタープリミティブの結果を入力として使用する。

result の値が、指定された filter 要素内に複数回現れる場合、その結果への参照では、 属性 result が指定された値である、最も近い先行する フィルタープリミティブが使用される。

結果への前方参照は許可されず、結果が指定されていないものとして扱われる。

存在しない結果への参照は、結果が指定されていないものとして扱われる。

6 つのキーワードの定義:

SourceGraphic

このキーワードは、filter 要素への元の入力であったグラフィックス要素を表す。ラスター効果の フィルター プリミティブでは、グラフィックス要素は画像空間内で、初期状態が透明な RGBA ラスターへラスタライズされる。元のグラフィックによって変更されなかったピクセルは透明のままとなる。画像は、 線形 RGBA ピクセルでレンダリングされるものと規定される。この画像のアルファチャンネルは、 SVG によって指定されたアンチエイリアシングを取り込む。(ラスターは線形であるため、この画像のアルファチャンネルは 各ピクセルの正確な被覆率を表す。)

SourceAlpha

このキーワードは、filter 要素への元の入力であったグラフィックス要素を表す。SourceAlpha は、アルファチャンネルのみを使用する点を除き、 SourceGraphic とすべて同じ規則に従う。 入力画像は RGBA 画像であり、RGB チャンネルには暗黙的に黒の色値が含まれるが、 アルファチャンネルは SourceGraphic と同じである。

注: このオプションを使用する場合、一部の実装では アルファチャンネルを抽出するためにグラフィックス要素をラスタライズする必要がある場合がある。

BackgroundImage

このキーワードは、filter 要素が呼び出された時点で、フィルター領域の背後にある現在の分離グループによって定義された背景を表す。isolation プロパティ [COMPOSITING-1] を参照。

BackgroundAlpha

アルファチャンネルのみを使用する点を除き、BackgroundImage と同じ。SourceAlpha および isolation プロパティ [COMPOSITING-1] を参照。

FillPaint

このキーワードは、フィルター 効果の対象要素における fill プロパティの値を表す。FillPaint 画像は概念上無限の 広がりを持つ。多くの場合、この画像はどこでも不透明であるが、「paint」 自体がアルファを持つ場合、たとえばグラデーションまたはパターン自体に透明または半透明の部分が含まれる場合には、不透明でないこともある。fill がペイントサーバーを参照する場合、ペイントサーバーの座標空間はフィルター対象オブジェクトに対して定義された座標 空間となる。たとえば、ペイントサーバーがオブジェクトの objectBoundingBox を使用する必要がある場合、 フィルター対象オブジェクトのオブジェクトバウンディングボックスがペイントサーバーの基準サイズを定義する。 ペイントサーバーが userSpaceOnUse を使用する必要がある場合、 フィルター対象オブジェクトの ローカル座標系内の最も近いビューポートが ペイントサーバーの基準サイズを定義する。

StrokePaint

このキーワードは、フィルター 効果の対象要素における stroke プロパティの値を表す。StrokePaint 画像は概念上 無限の広がりを持つ。詳細については、上記の FillPaint を参照。

アニメーション可能: はい。

9.3. フィルタープリミティブツリー

フィルタープリミティブの入力がない、または 1 つであるフィルタープリミティブは、連結してフィルターチェーンを構成できる。たとえば、 2 つ以上の <filter-function> を持つ <filter-value-list> のフィルタープリミティブ表現は、フィルターチェーンの例である。各 フィルタープリミティブは、直前のフィルタープリミティブの結果を入力として受け取る。

フィルタープリミティブの 子を持つ filter 要素の単純な例。
<filter id="filter">
  <feColorMatrix type="hueRotate" values="45"/>
  <feOffset dx="10" dy="10"/>
  <feGaussianBlur stdDeviation="3"/>
</filter>

feColorMatrixfeOffset、および feGaussianBlur はフィルターチェーンを構成する。

feColorMatrixSourceGraphic を入力として受け取る。その結果は feOffset の入力となり、その結果が feGaussianBlur の入力となる。

一部のフィルタープリミティブは、複数のフィルタープリミティブ入力を持つ場合がある。in および result 属性を使用することで、 複数のフィルタープリミティブを複雑なフィルター構造に組み合わせることができる。フィルタープリミティブには前方参照不可の制限があるため、 すべてのフィルター構造はツリー、すなわち フィルタープリミティブツリーとして表現できる。フィルタープリミティブツリーのルートフィルタープリミティブは、 filter 要素のフィルタープリミティブ子のうち、最も後に続くプリミティブである。

フィルターチェーンは、フィルタープリミティブツリーとして表現することもできるフィルター構造の一形態である。 したがって、これ以降、フィルターチェーンもフィルタープリミティブツリーと呼ぶ。

filter 要素は、 1 つ以上のフィルタープリミティブツリーを持つことができる。後続のフィルタープリミティブが filter 要素の最後のフィルタープリミティブ子であるフィルタープリミティブツリーを、 主フィルタープリミティブツリーと呼ぶ。

フィルター処理に寄与するのは主フィルタープリミティブツリーだけである。実装は、 その他の可能なすべてのフィルタープリミティブツリーを無視してもよい。

filter 要素にフィルタープリミティブツリーがない場合、フィルターが適用される要素はレンダリングされない。

複数のフィルタープリミティブツリーの例:
<filter id="filter">
  <-- 最初の フィルター プリミティブ ツリーフィルター 処理では 無視される-->
  <feColorMatrix type="hueRotate" values="45"/>
  <feOffset dx="10" dy="10"/>
  <feGaussianBlur stdDeviation="3"/>
  <--  フィルター プリミティブ ツリー-->
  <feFlood flood-color="green" result="flood"/>
  <feComposite operator="in" in="SourceAlpha" in2="flood"/>
</filter>

上記のフィルターには、次のフィルタープリミティブで構成される 2 つのフィルタープリミティブツリーがある:

  1. feColorMatrixfeOffset、および feGaussianBlurfeGaussianBlur がツリーのルートフィルター プリミティブ)と、

  2. feFlood および feCompositefeComposite がツリーのルートフィルタープリミティブ)。

2 つのフィルタープリミティブツリーは接続されていない。フィルター処理に寄与するのは、 2 番目の主フィルタープリミティブツリーだけである。実装は最初のツリーを無視できる。

9.4. フィルタープリミティブ部分領域

すべての フィルタープリミティブは、 属性 xywidth、および height を持ち、これらが合わせて、指定された フィルタープリミティブの計算およびレンダリングを制限する フィルタープリミティブ 部分領域を識別する。xywidth、および height 属性は、 他の フィルタープリミティブの座標および長さ 属性と同じ規則に従って定義され、したがって filter 要素上の primitiveUnits 属性によって確立される座標系の値を表す。

xywidth、および height の既定値は、参照されるすべてのノードについて定義された部分領域の 和集合(すなわち、最もぴったり合うバウンディングボックス)である。参照されるノードがない場合 (たとえば feImage または feTurbulence)、または参照される ノードの 1 つ以上が標準入力(SourceGraphicSourceAlphaBackgroundImageBackgroundAlphaFillPaint、または StrokePaint のいずれか)である場合、または feTile の場合(その主な機能が 参照されるノードを X と Y に複製し、それによって通常はより大きな 結果を生成するため特別である)、既定の部分領域は 0%, 0%, 100%, 100% となる。特例として、 パーセンテージは フィルター領域の寸法を基準とし、これにより既定の フィルタープリミティブ 部分領域フィルター領域と等しくなる。

フィルタープリミティブ部分領域の幅または 高さが負またはゼロの場合、フィルタープリミティブの効果は無効になる。

フィルター領域は、 フィルタープリミティブの入力画像に対する強制的なクリップ矩形として機能する。

フィルタープリミティブ部分領域は、 フィルタープリミティブの結果に対する強制的なクリップ矩形として機能する。

すべての中間オフスクリーンは、フィルタープリミティブ 部分領域フィルター 領域との交差範囲を超えないものと定義される。フィルター領域および すべてのフィルタープリミティブ部分領域は、フィルター領域または フィルタープリミティブ部分領域のいずれかと少しでも交差するすべてのピクセルを収容できるよう、すべてのオフスクリーンが十分な大きさになるように設定される。

feTile は先行するフィルタープリミティブを参照し、 その参照先フィルター プリミティブの フィルタープリミティブ部分領域に基づいてタイルをつなぎ合わせ、 自身の フィルタープリミティブ 部分領域を埋める。
<svg width="400" height="400" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <filter id="flood" x="0" y="0" width="100%" height="100%" primitiveUnits="objectBoundingBox">
       <feFlood x="25%" y="25%" width="50%" height="50%"
          flood-color="green" flood-opacity="0.75"/>
    </filter>
    <filter id="blend" primitiveUnits="objectBoundingBox">
       <feBlend x="25%" y="25%" width="50%" height="50%"
          in2="SourceGraphic" mode="multiply"/>
    </filter>
    <filter id="merge" primitiveUnits="objectBoundingBox">
       <feMerge x="25%" y="25%" width="50%" height="50%">
        <feMergeNode in="SourceGraphic"/>
        <feMergeNode in="FillPaint"/>
       </feMerge>
    </filter>
  </defs>

  <g fill="none" stroke="blue" stroke-width="4">
     <rect width="200" height="200"/>
     <line x2="200" y2="200"/>
     <line x1="200" y2="200"/>
  </g>
  <circle fill="green" filter="url(#flood)" cx="100" cy="100" r="90"/>

  <g transform="translate(200 0)">
    <g fill="none" stroke="blue" stroke-width="4">
       <rect width="200" height="200"/>
       <line x2="200" y2="200"/>
       <line x1="200" y2="200"/>
    </g>
    <circle fill="green" filter="url(#blend)" cx="100" cy="100" r="90"/>
  </g>

  <g transform="translate(0 200)">
    <g fill="none" stroke="blue" stroke-width="4">
       <rect width="200" height="200"/>
       <line x2="200" y2="200"/>
       <line x1="200" y2="200"/>
    </g>
    <circle fill="green" fill-opacity="0.5" filter="url(#merge)" cx="100" cy="100" r="90"/>
  </g>
</svg>
部分領域の例

部分領域の例

この例を SVG として表示

上記の例には 3 つの矩形があり、それぞれに十字と円が含まれている。各円 要素には異なるフィルターが適用されているが、フィルタープリミティブ 部分領域は同じである。フィルター出力は フィルタープリミティブ部分領域に制限されるべきであるため、 円そのものは見えず、フィルタープリミティブ部分領域を構成する矩形だけが見えるはずである。

9.5. フィルタープリミティブ feBlend

名前: feBlend
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEBlendElement

このフィルターは、一般的な画像処理ソフトウェアのブレンドモードを使用して 2 つのオブジェクトをブレンドする。2 つの入力画像を ピクセル単位で組み合わせる。([COMPOSITING-1] を参照。)

属性の定義:

mode = "<blend-mode>"

「Compositing and Blending Level 1」[COMPOSITING-1] で定義されるブレンドモードの 1 つで、入力 in がソース Cs を表し、第 2 入力 in2背景 Cb を表す。このフィルタープリミティブの出力 Cm は、 CsCb をブレンドした結果である。

mode初期値normal である。

アニメーション可能: はい。

no-composite = "no-composite"

no-composite 属性が存在する場合、 指定されたブレンドモードはアルファ合成を適用してはならない。合成なしの「mixing」式については ブレンディング [COMPOSITING-1] を参照。 それ以外の場合、実装は mode で指定されたブレンドモードを Source Over 合成演算子と組み合わせなければならない。合成を伴う「mixing」式については ブレンディング [COMPOSITING-1] を参照。

注: この属性は、SVG 1.1 の feBlend 要素定義への追加である。no-composite は、指定された場合、 入力ソースをフィルター対象オブジェクトの背景とブレンドするときの「二重合成」効果を 避けることを意図している(たとえば、BackgroundImage フィルタープリミティブを使用する場合)。 ほとんどのユースケースでは、作者は no-composite 属性を指定する必要はない。

アニメーション可能: いいえ。

in2 = "(in 属性を参照)"

ブレンド操作への第 2 入力画像。

アニメーション可能: はい。

アルファ合成を伴う normal ブレンドモードは、 feComposite フィルタープリミティブの operator="over" と等価であり、 feMerge で使用されるブレンド方式と一致し、 フィルター効果の外側のすべての合成で SVG が使用する 単純アルファ合成手法とも一致する。

<svg width="5cm" height="5cm" viewBox="0 0 500 500"
     xmlns="http://www.w3.org/2000/svg">
  <title>feBlend の例 - feBlend モードの例</title>
  <desc>グラデーションにブレンドされた 5 つのテキスト文字列。
        5 つの feBlend モードそれぞれに 1 つのテキスト文字列がある。</desc>
  <defs>
    <linearGradient id="MyGradient" gradientUnits="userSpaceOnUse"
            x1="100" y1="0" x2="300" y2="0">
      <stop offset="0" stop-color="#000000" />
      <stop offset=".33" stop-color="#ffffff" />
      <stop offset=".67" stop-color="#ff0000" />
      <stop offset="1" stop-color="#808080" />
    </linearGradient>
    <filter id="Normal">
      <feBlend mode="normal" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Multiply">
      <feBlend mode="multiply" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Screen">
      <feBlend mode="screen" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Darken">
      <feBlend mode="darken" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
    <filter id="Lighten">
      <feBlend mode="lighten" in2="BackgroundImage" in="SourceGraphic"/>
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="498" height="498"/>
  <g isolation="isolate" >
    <rect x="100" y="20" width="300" height="460" fill="url(#MyGradient)" />
    <g font-family="Verdana" font-size="75" fill="#888888" fill-opacity=".6" >
      <text x="50" y="90" filter="url(#Normal)" >通常</text>
      <text x="50" y="180" filter="url(#Multiply)" >乗算</text>
      <text x="50" y="270" filter="url(#Screen)" >スクリーン</text>
      <text x="50" y="360" filter="url(#Darken)" >暗く</text>
      <text x="50" y="450" filter="url(#Lighten)" >明るく</text>
    </g>
  </g>
</svg>
feBlend の例

feBlend の例

この例を SVG として表示

9.6. フィルタープリミティブ feColorMatrix

名前: feColorMatrix
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEColorMatrixElement

このフィルターは行列変換を適用する:

R ' G ' B ' A ' 1 = a 00 a 01 a 02 a 03 a 04 a 10 a 11 a 12 a 13 a 14 a 20 a 21 a 22 a 23 a 24 a 30 a 31 a 32 a 33 a 34 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { a_00 # a_01 # a_02 # a_03 # a_04 ## a_10 # a_11 # a_12 # a_13 # a_14 ## a_20 # a_21 # a_22 # a_23 # a_24 ## a_30 # a_31 # a_32 # a_33 # a_34 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

入力グラフィックスの各ピクセルの RGBA 色値およびアルファ値に適用し、新しい一組の RGBA 色値およびアルファ値を持つ結果を生成する。

計算は乗算されていない色値に対して実行される。

属性の定義:

type = "matrix | saturate | hueRotate | luminanceToAlpha"

行列演算の種類を示す。キーワード matrix は、 完全な 5x4 行列の値が指定されることを示す。その他のキーワードは、完全な 行列を指定せずに一般的な色操作を実行できるようにするための便利な 短縮形を表す。

type初期値matrix である。

アニメーション可能: はい。

values = "<number> のリスト"

values の内容は、属性 type の値によって異なる:

  • type="matrix" の場合、values は、空白および/またはコンマで区切られた 20 個の行列 値(a00 a01 a02 a03 a04 a10 a11 ... a34)のリストである。たとえば、 単位行列は次のように表せる:

    type="matrix"
    values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 1 0"
  • type="saturate" の場合、values は単一の実数 値である。saturate 操作は、 次の行列演算と等価である:

    R ' G ' B ' A ' 1 = 0.213 + 0.787s 0.715 0.715s 0.072 0.072s 0 0 0.213 0.213s 0.715 + 0.285s 0.072 0.072s 0 0 0.213 0.213s 0.715 0.715s 0.072 + 0.928s 0 0 0 0 0 1 0 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { 0.213 + 0.787s # 0.715 - 0.715s # 0.072 - 0.072s # 0 # 0 ## 0.213 - 0.213s # 0.715 + 0.285s # 0.072 - 0.072s # 0 # 0 ## 0.213 - 0.213s # 0.715 - 0.715s # 0.072 + 0.928s # 0 # 0 ## 0 # 0 # 0 # 1 # 0 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

    注: 0 の値は 完全に彩度を失った(グレースケールの)フィルター結果を生成し、1 の値は フィルター入力画像を変更せずそのまま通過させる。0..1 の範囲外の値は、それぞれフィルター入力画像の彩度を 不足または過剰にする。

    注: 輝度係数の精度は、 以前の仕様テキスト [Cmam] と比較して向上した。

  • type="hueRotate" の場合、values は単一の実 数値(度)である。hueRotate 操作は、 次の行列演算と等価である:

    R ' G ' B ' A ' 1 = a 00 a 01 a 02 0 0 a 10 a 11 a 12 0 0 a 20 a 21 a 22 0 0 0 0 0 1 0 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { a_00 # a_01 # a_02 # 0 # 0 ## a_10 # a_11 # a_12 # 0 # 0 ## a_20 # a_21 # a_22 # 0 # 0 ## 0 # 0 # 0 # 1 # 0 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

    ここで、a00、a01 などの項は次のように計算される:

    a 00 a 01 a 02 a 10 a 11 a 12 a 20 a 21 a 22 = + 0.213 + 0.715 + 0.072 + 0.213 + 0.715 + 0.072 + 0.213 + 0.715 + 0.072 + cos ( hueRotate value ) + 0.787 0.715 0.072 0.213 + 0.285 0.072 0.213 0.715 + 0.928 + sin ( hueRotate value ) 0.213 0.715 + 0.928 + 0.143 + 0.140 0.283 0.787 + 0.715 + 0.072 left[ matrix { a_00 # a_01 # a_02 ## a_10 # a_11 # a_12 ## a_20 # a_21 # a_22 } right] = left[ matrix { +0.213 # +0.715 # +0.072 ## +0.213 # +0.715 # +0.072 ## +0.213 # +0.715 # +0.072 } right] + cos(hueRotate value)cdot left[ matrix { +0.787 # -0.715 # -0.072 ## -0.213 # +0.285 # -0.072 ## -0.213 # -0.715 # +0.928 } right] + sin(hueRotate value) cdot left[ matrix { -0.213 # -0.715 # +0.928 ## +0.143 # +0.140 # -0.283 ## -0.787 # +0.715 # +0.072 } right]

    したがって、色相行列の左上の項は次のようになる:

    a 00 = 0.2127 + cos ( hueRotate value ) 0.7873 sin ( hueRotate value ) 0.2127 a_00 = 0.2127 + cos(hueRotate value) cdot 0.7873 - sin(hueRotate value) cdot 0.2127
  • type="luminanceToAlpha" の場合、values は適用されない。luminanceToAlpha 操作は、 次の行列演算と等価である:

    R ' G ' B ' A ' 1 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 0 1 R G B A 1 left [ stack {R' # G' # B' # A' # 1} right ] = left [ matrix { 0 # 0 # 0 # 0 # 0 ## 0 # 0 # 0 # 0 # 0 ## 0 # 0 # 0 # 0 # 0 ## 0.2126 # 0.7152 # 0.0722 # 0 # 0 ## 0 # 0 # 0 # 0 # 1 } right ] cdot left[ stack { R # G # B # A # 1 } right]

values初期値

type="matrix" の場合

単位行列を既定値とする

type="saturate" の場合

1 を既定値とする

type="hueRotate" の場合

単位行列となる値 0 を既定値とする。

values リスト内の項目数が、type によって要求される 項目数と一致しない場合、フィルタープリミティブは パススルー フィルターとして動作する。

アニメーション可能: はい。

<svg width="8cm" height="5cm" viewBox="0 0 800 500"
     xmlns="http://www.w3.org/2000/svg">
  <title>feColorMatrix の例 - feColorMatrix 操作の例</title>
  <desc>feColorMatrix の効果を示す 5 つのテキスト文字列:
        参照として機能するフィルターなしのテキスト文字列、
        グレースケールに変換するための feColorMatrix matrix オプションの使用、
        feColorMatrix saturate オプションの使用、
        feColorMatrix hueRotate オプションの使用、
        および feColorMatrix luminanceToAlpha オプションの使用。</desc>
  <defs>
    <linearGradient id="MyGradient" gradientUnits="userSpaceOnUse"
            x1="100" y1="0" x2="500" y2="0">
      <stop offset="0" stop-color="#ff00ff" />
      <stop offset=".33" stop-color="#88ff88" />
      <stop offset=".67" stop-color="#2020ff" />
      <stop offset="1" stop-color="#d00000" />
    </linearGradient>
    <filter id="Matrix" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="matrix" in="SourceGraphic"
           values=".33 .33 .33 0 0
                   .33 .33 .33 0 0
                   .33 .33 .33 0 0
                   .33 .33 .33 0 0"/>
    </filter>
    <filter id="Saturate40" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="saturate" in="SourceGraphic" values="0.4"/>
    </filter>
    <filter id="HueRotate90" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="hueRotate" in="SourceGraphic" values="90"/>
    </filter>
    <filter id="LuminanceToAlpha" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feColorMatrix type="luminanceToAlpha" in="SourceGraphic" result="a"/>
      <feComposite in="SourceGraphic" in2="a" operator="in" />
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="798" height="498"/>
  <g font-family="Verdana" font-size="75"
            font-weight="bold" fill="url(#MyGradient)" >
    <rect x="100" y="0" width="500" height="20" />
    <text x="100" y="90">フィルターなし</text>
    <text x="100" y="190" filter="url(#Matrix)" >行列</text>
    <text x="100" y="290" filter="url(#Saturate40)" >彩度</text>
    <text x="100" y="390" filter="url(#HueRotate90)" >色相回転</text>
    <text x="100" y="490" filter="url(#LuminanceToAlpha)" >輝度</text>
  </g>
</svg>
例

feColorMatrix の例

この例を SVG として表示

9.7. フィルタープリミティブ feComponentTransfer

名前: feComponentTransfer
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素feFuncRfeFuncGfeFuncBfeFuncAscript 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEComponentTransferElement

このフィルタープリミティブは、次のようにデータを成分ごとに再マッピングする:

R' = feFuncR( R )G' = feFuncG( G )
B' = feFuncB( B )
A' = feFuncA( A )

各ピクセルに対して適用される。これにより、明るさの調整、コントラストの調整、カラーバランス、 しきい値処理などの操作が可能になる。

計算は乗算されていない色値に対して実行される。

feComponentTransfer 要素の子要素は、4 つのチャンネルの伝達 関数を指定する:

feFuncRfeFuncGfeFuncBfeFuncA 要素の集合は、伝達関数要素とも呼ばれる。

feComponentTransfer 要素の処理には、次の規則が適用される:

9.7.1. 伝達関数 feFuncR

名前: feFuncR
カテゴリー: 伝達関数要素
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEFuncRElement

以下の属性は 伝達関数要素属性であり、伝達 関数要素に適用される。

属性の定義:

type = "identity | table | discrete | linear | gamma"

成分伝達関数の種類を示す。関数の種類によって、その他の属性が適用可能かどうかが決まる。

以下では、C は初期成分(たとえば feFuncR)、C' は再マッピングされた 成分であり、どちらも閉区間 [0,1] にある。

  • identity の場合:

    C' = C
  • table の場合、関数は 属性 tableValues で指定された値の間の 線形補間によって定義される。テーブルには n+1 個の値(すなわち v0 から vn)があり、 均等な大きさの n 個の補間領域の開始値と終了値を指定する。補間には次の 式を使用する:

    C < 1 に対して、次を満たす k を求める:

    k/n <= C < (k+1)/n

    結果 C' は次で与えられる:

    C' = vk + (C - k/n)*n * (vk+1 - vk)

    C = 1 の場合:

    C' = vn.

  • discrete の場合、関数は 属性 tableValues で指定されたステップ関数によって定義され、 n 個のステップからなるステップ関数を識別するために、 n 個の値(すなわち v0 から vn-1)のリストが提供される。ステップ関数は 次の式によって定義される:

    C < 1 に対して、次を満たす k を求める:

    k/n <= C < (k+1)/n

    結果 C' は次で与えられる:

    C' = vk

    C = 1 の場合:

    C' = vn-1.

  • linear の場合、関数は次の 一次方程式によって定義される:

    C' = slope * C + intercept

  • gamma の場合、関数は 次の指数関数によって定義される:

    C' = amplitude * pow(C, exponent) + offset

type初期値identity である。

アニメーション可能: はい。

tableValues = "<number> のリスト)"

type="table" の場合、空白 および/またはコンマで区切られた <number> のリスト v0,v1,...vn がルックアップテーブルを定義する。 空のリストは恒等伝達関数となる。

属性が指定されていない場合、空のリストが指定されたものとして効果が適用される。

アニメーション可能: はい。

slope = "<number>"

type="linear" の場合、一次関数の傾き。

slope初期値1

アニメーション可能: はい。

intercept = "<number>"

type="linear" の場合、一次関数の切片。

intercept初期値0

アニメーション可能: はい。

amplitude = "<number>"

type="gamma" の場合、ガンマ関数の振幅。

amplitude初期値1

アニメーション可能: はい。

exponent = "<number>"

type="gamma" の場合、ガンマ関数の指数。

exponent初期値1

アニメーション可能: はい。

offset = "<number>"

type="gamma" の場合、ガンマ関数のオフセット。

offset初期値0

アニメーション可能: はい。

<svg width="8cm" height="4cm" viewBox="0 0 800 400"
     xmlns="http://www.w3.org/2000/svg">
  <title>feComponentTransfer の例 - feComponentTransfer 操作の例</title>
  <desc>feComponentTransfer の効果を示す 4 つのテキスト文字列:
        参照として機能する恒等関数、
        feComponentTransfer table オプションの使用、
        feComponentTransfer linear オプションの使用、
        および feComponentTransfer gamma オプションの使用。</desc>
  <defs>
    <linearGradient id="MyGradient" gradientUnits="userSpaceOnUse"
            x1="100" y1="0" x2="600" y2="0">
      <stop offset="0" stop-color="#ff0000" />
      <stop offset=".33" stop-color="#00ff00" />
      <stop offset=".67" stop-color="#0000ff" />
      <stop offset="1" stop-color="#000000" />
    </linearGradient>
    <filter id="Identity" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="identity"/>
        <feFuncG type="identity"/>
        <feFuncB type="identity"/>
        <feFuncA type="identity"/>
      </feComponentTransfer>
    </filter>
    <filter id="Table" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="table" tableValues="0 0 1 1"/>
        <feFuncG type="table" tableValues="1 1 0 0"/>
        <feFuncB type="table" tableValues="0 1 1 0"/>
      </feComponentTransfer>
    </filter>
    <filter id="Linear" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="linear" slope=".5" intercept=".25"/>
        <feFuncG type="linear" slope=".5" intercept="0"/>
        <feFuncB type="linear" slope=".5" intercept=".5"/>
      </feComponentTransfer>
    </filter>
    <filter id="Gamma" filterUnits="objectBoundingBox"
            x="0%" y="0%" width="100%" height="100%">
      <feComponentTransfer>
        <feFuncR type="gamma" amplitude="2" exponent="5" offset="0"/>
        <feFuncG type="gamma" amplitude="2" exponent="3" offset="0"/>
        <feFuncB type="gamma" amplitude="2" exponent="1" offset="0"/>
      </feComponentTransfer>
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="798" height="398"/>
  <g font-family="Verdana" font-size="75"
            font-weight="bold" fill="url(#MyGradient)" >
    <rect x="100" y="0" width="600" height="20" />
    <text x="100" y="90">恒等</text>
    <text x="100" y="190" filter="url(#Table)" >テーブル参照</text>
    <text x="100" y="290" filter="url(#Linear)" >一次関数</text>
    <text x="100" y="390" filter="url(#Gamma)" >ガンマ関数</text>
  </g>
</svg>
feComponentTransfer の例

feComponentTransfer の例

この例を SVG として表示

9.7.2. 伝達関数 feFuncG

名前: feFuncG
カテゴリー: 伝達関数要素
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEFuncGElement

属性値の定義については feFuncR を 参照。

9.7.3. 伝達関数 feFuncB

名前: feFuncB
カテゴリー: 伝達関数要素
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEFuncBElement

属性値の定義については feFuncR を 参照。

9.7.4. 伝達関数 feFuncA

名前: feFuncA
カテゴリー: 伝達関数要素
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEFuncAElement

属性値の定義については feFuncR を 参照。

9.8. フィルタープリミティブ feComposite

名前: feComposite
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFECompositeElement

このフィルターは、Porter-Duff [PORTERDUFF] 合成操作のいずれかを使用して、画像空間内で 2 つの入力画像をピクセル単位で結合する: overinatopoutxorlighter [COMPOSITING-1]。 さらに、成分ごとの arithmetic 操作(結果は [0..1] の範囲にクランプされる)を 適用できる。

arithmetic 操作は、feDiffuseLighting および feSpecularLighting フィルターの出力をテクスチャーデータと組み合わせる際に有用である。また、 dissolve の実装にも有用である。arithmetic 操作を選択した場合、各結果ピクセルは 次の式を使用して計算される:

result = k1*i1*i2 + k2*i1 + k3*i2 + k4

ここで:

このフィルタープリミティブでは、結果画像の範囲は、フィルタープリミティブ部分領域について説明する節で 記述されているように拡大する場合がある。

属性の定義:

operator = "over | in | out | atop | xor | lighter | arithmetic"

実行する合成操作。arithmetic を除くすべての operator の種類は、[COMPOSITING-1] で説明される対応する操作と一致し、in がソースを表し、in2 が宛先を表す。arithmetic 演算子については上で説明した。

operator初期値over である。

アニメーション可能: はい。

k1 = "<number>"

operator="arithmetic" の場合にのみ適用される。

k1初期値0

アニメーション可能: はい。

k2 = "<number>"

operator="arithmetic" の場合にのみ適用される。

k2初期値0

アニメーション可能: はい。

k3 = "<number>"

operator="arithmetic" の場合にのみ適用される。

k3初期値0

アニメーション可能: はい。

k4 = "<number>"

operator="arithmetic" の場合にのみ適用される。

k4初期値0

アニメーション可能: はい。

in2 = "in 属性を参照)"

合成操作への第 2 入力画像。

アニメーション可能: はい。

注: Compositing and Blending [COMPOSITING-1] は、さらに多くの合成キーワードを定義している。追加のキーワードの機能は、 入力フィルタープリミティブの inin2 を入れ替えることで実現できる。

<svg width="330" height="195" viewBox="0 0 1100 650"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>feComposite の例 - feComposite 操作の例</title>
  <desc>重なり合う三角形の 6 組を 4 行に並べ、
        異なる不透明度値と異なる背景消去の条件下での
        6 種類の feComposite 演算子を示す。</desc>
  <defs>
    <desc>6 種類の各合成演算子について、2 組の 6 個のフィルターを定義する。
          最初の組は、不透明な白で塗りつぶすことにより背景画像を消去する。
          2 番目の組は背景を消去しない。その結果、
          背景が透けて見える場合もあれば、
          背景がそれ自身とブレンドされる場合もある(すなわち「二重計上」)。</desc>
    <filter id="overFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="inFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="outFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="atopFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="xorFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="arithmeticFlood" filterUnits="objectBoundingBox"
            x="-5%" y="-5%" width="110%" height="110%">
      <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
      <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                   operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
      <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
    </filter>
    <filter id="overNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
    </filter>
    <filter id="inNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
    </filter>
    <filter id="outNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
    </filter>
    <filter id="atopNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
    </filter>
    <filter id="xorNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
    </filter>
    <filter id="arithmeticNoFlood" filterUnits="objectBoundingBox"
            x="-5%" y="-5%" width="110%" height="110%">
      <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                   operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
    </filter>
    <path id="Blue100" d="M 0 0 L 100 0 L 100 100 z" fill="#00ffff" />
    <path id="Red100" d="M 0 0 L 0 100 L 100 0 z" fill="#ff00ff" />
    <path id="Blue50" d="M 0 125 L 100 125 L 100 225 z" fill="#00ffff" fill-opacity=".5" />
    <path id="Red50" d="M 0 125 L 0 225 L 100 125 z" fill="#ff00ff" fill-opacity=".5" />
    <g id="TwoBlueTriangles">
      <use xlink:href="#Blue100"/>
      <use xlink:href="#Blue50"/>
    </g>
    <g id="BlueTriangles">
      <use transform="translate(275,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(400,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(525,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(650,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(775,25)" xlink:href="#TwoBlueTriangles"/>
      <use transform="translate(900,25)" xlink:href="#TwoBlueTriangles"/>
    </g>
  </defs>

  <rect fill="none" stroke="blue" x="1" y="1" width="1098" height="648"/>
  <g font-family="Verdana" font-size="40" shape-rendering="crispEdges">
    <desc>不透明な白い面の上に描画するフィルターを使用して例をレンダリングし、
          背景を完全に消去する。</desc>
    <g isolation="isolate">
      <text x="15" y="75">不透明度 1.0</text>
      <text x="15" y="115" font-size="27">(feFlood あり)</text>
      <text x="15" y="200">不透明度 0.5</text>
      <text x="15" y="240" font-size="27">(feFlood あり)</text>
      <use xlink:href="#BlueTriangles"/>
      <g transform="translate(275,25)">
        <use xlink:href="#Red100" filter="url(#overFlood)" />
        <use xlink:href="#Red50" filter="url(#overFlood)" />
        <text x="5" y="275">over</text>
      </g>
      <g transform="translate(400,25)">
        <use xlink:href="#Red100" filter="url(#inFlood)" />
        <use xlink:href="#Red50" filter="url(#inFlood)" />
        <text x="35" y="275">in</text>
      </g>
      <g transform="translate(525,25)">
        <use xlink:href="#Red100" filter="url(#outFlood)" />
        <use xlink:href="#Red50" filter="url(#outFlood)" />
        <text x="15" y="275">out</text>
      </g>
      <g transform="translate(650,25)">
        <use xlink:href="#Red100" filter="url(#atopFlood)" />
        <use xlink:href="#Red50" filter="url(#atopFlood)" />
        <text x="10" y="275">atop</text>
      </g>
      <g transform="translate(775,25)">
        <use xlink:href="#Red100" filter="url(#xorFlood)" />
        <use xlink:href="#Red50" filter="url(#xorFlood)" />
        <text x="15" y="275">xor</text>
      </g>
      <g transform="translate(900,25)">
        <use xlink:href="#Red100" filter="url(#arithmeticFlood)" />
        <use xlink:href="#Red50" filter="url(#arithmeticFlood)" />
        <text x="-25" y="275">arithmetic</text>
      </g>
    </g>
    <g transform="translate(0,325)" isolation="isolate">
    <desc>背景を消去しないフィルターを使用して例をレンダリングする。
          そのため、場合によっては背景が引き続き
          表示され、別の場合には背景
          画像がそれ自身とブレンドされる(「二重計上」)。</desc>
      <text x="15" y="75">不透明度 1.0</text>
      <text x="15" y="115" font-size="27">(feFlood なし)</text>
      <text x="15" y="200">不透明度 0.5</text>
      <text x="15" y="240" font-size="27">(feFlood なし)</text>
      <use xlink:href="#BlueTriangles"/>
      <g transform="translate(275,25)">
        <use xlink:href="#Red100" filter="url(#overNoFlood)" />
        <use xlink:href="#Red50" filter="url(#overNoFlood)" />
        <text x="5" y="275">over</text>
      </g>
      <g transform="translate(400,25)">
        <use xlink:href="#Red100" filter="url(#inNoFlood)" />
        <use xlink:href="#Red50" filter="url(#inNoFlood)" />
        <text x="35" y="275">in</text>
      </g>
      <g transform="translate(525,25)">
        <use xlink:href="#Red100" filter="url(#outNoFlood)" />
        <use xlink:href="#Red50" filter="url(#outNoFlood)" />
        <text x="15" y="275">out</text>
      </g>
      <g transform="translate(650,25)">
        <use xlink:href="#Red100" filter="url(#atopNoFlood)" />
        <use xlink:href="#Red50" filter="url(#atopNoFlood)" />
        <text x="10" y="275">atop</text>
      </g>
      <g transform="translate(775,25)">
        <use xlink:href="#Red100" filter="url(#xorNoFlood)" />
        <use xlink:href="#Red50" filter="url(#xorNoFlood)" />
        <text x="15" y="275">xor</text>
      </g>
      <g transform="translate(900,25)">
        <use xlink:href="#Red100" filter="url(#arithmeticNoFlood)" />
        <use xlink:href="#Red50" filter="url(#arithmeticNoFlood)" />
        <text x="-25" y="275">arithmetic</text>
      </g>
    </g>
  </g>
</svg>
feComposite の例

feComposite の例

この例を SVG として表示

9.9. フィルタープリミティブ feConvolveMatrix

名前: feConvolveMatrix
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEConvolveMatrixElement

feConvolveMatrix は行列畳み込みフィルター効果を適用する。畳み込みは、入力画像のピクセルと 隣接するピクセルを組み合わせて結果画像を生成する。畳み込みによって、ぼかし、エッジ検出、 シャープ化、エンボス、ベベルなど、さまざまな画像処理操作を実現できる。

行列畳み込みは、入力画像内の特定のピクセル 値を隣接するピクセル値とどのように組み合わせて結果ピクセル値を生成するかを記述する n 行 m 列の行列(畳み込みカーネル)に基づく。 各結果ピクセルは、対応するソースピクセルとその 隣接ピクセルにカーネル行列を適用することによって決定される。特定のピクセルの各色値に適用される基本的な畳み込み式は次のとおりである:

color X , Y = i = 0 orderY 1 j = 0 orderX 1 source x targetX + j , y targetY + i kernalMatrix orderX j 1, orderY i 1 divisor + bias alpha x , y func color_{X , Y} = { sum from{i=0} to{func orderY -1} sum from{j=0} to{func orderX -1} func source_{x - func targetX + j , y - targetY + i} cdot func kernalMatrix_{func orderX - j - 1, func orderY - i - 1 }} over {func divisor} + func bias cdot func alpha_{x,y}

ここで、"orderX" および "orderY" は order 属性の X 値および Y 値を表し、"targetX" は targetX 属性の値を表し、"targetY" は targetY 属性の値を表し、"kernelMatrix" は kernelMatrix 属性の値を表し、"divisor" は divisor 属性の値を表し、"bias" は bias 属性の値を表す。

上記の式では、多くのコンピューターグラフィックスの教科書で説明されている畳み込み理論に一致させるため、 カーネル行列の値は、ソース画像および出力画像に対してカーネル行列を 180 度回転した形で適用される。

説明のため、5 ピクセル×5 ピクセルの入力画像があり、その 1 つの 色チャンネルの色値が次のとおりであるとする:

0 20 40 235 235 100 120 140 235 235 200 220 240 235 235 255 255 255 255 255 255 255 255 255 255 left[ matrix {0 # 20 # 40 # 235 # 235 ## 100 # 120 # 140 # 235 # 235 ## 200 # 220 # 240 # 235 # 235 ## 255 # 255 # 255 # 255 # 255 ## 255 # 255 # 255 # 255 # 255} right]

また、次のような 3 行3列の畳み込みカーネルを定義するとする:

1 2 3 4 5 6 7 8 9 left[ matrix {1 # 2 # 3 ## 4 # 5 # 6 ## 7 # 8 # 9} right]

画像の 2 行目 2 列目の色値(ソースピクセル値は 120)に注目する。 最も単純な場合(入力画像のピクセルグリッドがカーネルのピクセル グリッドと完全に揃っている場合)を想定し、属性 divisortargetX および targetY に既定値を使用すると、結果の色値は次のようになる:

resultChannel 2,2 = 9 0 + 8 20 + 7 40 + 6 100 + 5 120 + 4 140 + 3 200 + 2 220 + 1 240 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 func resultChannel_2,2 = {{9 cdot 0} + {8 cdot 20} + {7 cdot 40} + {6 cdot 100} + {5 cdot 120} + {4 cdot 140} + {3 cdot 200} + {2 cdot 220} + {1 cdot 240}} over {9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1}

ピクセルに対して動作するため、行列畳み込みは本質的に解像度に依存する。feConvolveMatrix が解像度に依存しない結果を生成するようにするには、 属性 kernelUnitLength に明示的な値を指定すべきである。

kernelUnitLength は、その他の属性と組み合わせて、 フィルター効果座標系(すなわち、primitiveUnits 属性によって確立される座標系)内に暗黙のピクセルグリッドを定義する。入力画像は、 そのピクセルが kernelUnitLength と一致するよう一時的に再スケーリングされる。畳み込みは 再サンプリングされた画像に対して行われる。畳み込みの適用後、画像は元の 解像度に再サンプリングされる。

畳み込みの前に kernelUnitLength によって定義された座標系に一致させるため画像を再サンプリングする必要がある場合、 または畳み込みの後にデバイス座標系に一致させるため再サンプリングする場合、高品質のビューアーでは、 たとえばバイリニアやバイキュービックなど、適切な補間手法を使用することが推奨される。 利用可能な補間法の速度によっては、この選択は image-rendering プロパティの設定によって影響を受ける場合がある。文書がズームアウトされ、kernelUnitLength がデバイスピクセルよりかなり 小さい場合など、適切な結果を生成するために不要な場合には、実装は再サンプリングを最小化または省略する手法を選択してもよいことに注意。

属性の定義:

order = "<number-optional-number>"

kernelMatrix の各次元のセル数を示す。指定される値は 0 より大きい <integer> でなければならない。整数でない値は切り捨てられ、すなわち 0 に近い側の最も近い整数値に丸められる。最初の数値 <orderX> は行列の列数を示す。2 番目の数値 <orderY> は 行列の行数を示す。<orderY> が指定されていない場合は、 <orderX> が既定値となる。

小さい値(たとえば 3)のみを使用することが推奨される。より大きな値は CPU オーバーヘッドを非常に大きくする可能性があり、通常、その性能への影響を正当化するほどの結果は 得られない。

order初期値3

アニメーション可能: はい。

kernelMatrix = "<数値のリスト>"

畳み込み用のカーネル行列を構成する <number> のリスト。値は空白文字および/またはコンマで区切られる。リスト内の 項目数は <orderX> と <orderY> の積に等しくなければならない。

orderX * orderY の結果が値 リストの項目数と等しくない場合、フィルタープリミティブは パススルーフィルターとして動作する。

値リストの 項目数が無効な場合、どのように動作すべきか? <https://github.com/w3c/csswg-drafts/issues/237>

アニメーション可能: はい。

divisor = "<number>"

kernelMatrix を入力画像に適用して数値を得た後、 その数値を divisor で除算して最終的な 出力色値を得る。すべての行列値の合計である divisor を使用すると、結果全体の色強度を均一化する 効果が得られる傾向がある。指定された divisor が 0 の場合は、代わりに既定値が使用される。

初期値kernelMatrix 内のすべての値の合計である。ただし、 合計が 0 の場合は divisor が 1 に設定される。

アニメーション可能: はい。

bias = "<number>"

kernelMatrix を入力画像に適用して数値を得て、divisor を適用した後、bias 属性が各 成分に加算される。bias の用途の 1 つは、.5 の灰色値をフィルターのゼロ応答にしたい場合である。 bias プロパティはフィルターの範囲をシフトする。これにより、そうでなければ 0 または 1 にクランプされる 値を表現できる。

bias初期値0

アニメーション可能: はい。

targetX = "<integer>"

入力画像内の指定された対象ピクセルに対する畳み込み行列の X 方向の位置を決定する。 行列の最も左の列は列番号 0 である。値は次を満たさなければならない: 0 <= targetX < orderX。既定では、畳み込み行列は入力画像の各ピクセル上で X 方向に中央揃えされる (すなわち、targetX = floor ( orderX / 2 ))。

アニメーション可能: はい。

targetY = "<integer>"

入力画像内の指定された対象ピクセルに対する畳み込み行列の Y 方向の位置を決定する。 行列の最上行は行番号 0 である。値は次を満たさなければならない: 0 <= targetY < orderY。既定では、畳み込み行列は入力画像の各ピクセル上で Y 方向に中央揃えされる (すなわち、targetY = floor ( orderY / 2 ))。

アニメーション可能: はい。

edgeMode = "duplicate | wrap | none"

カーネルが入力画像の端またはその付近に配置されたときに行列演算を適用できるよう、 必要に応じて色値で入力画像をどのように拡張するかを決定する。

duplicate は、入力画像の各境界にある色値を複製することにより、 必要に応じて各境界に沿って入力画像を拡張することを示す。

元の N 行 M 列の画像。ここで m=M-1、n=N-1:

11 12 . . . 1 m 1 M 21 22 . . . 2 m 2 M . . . . . . . . . . . . . . . n 1 n 2 . . . nm nM N 1 N 2 . . . Nm NM left[ matrix {11 # 12 # { "." "." "."} # {1 m} # {1 M} ## 21 # 22 # { "." "." "."} # {2 m} # {2 M} ## { "." "." "."} # { "." "." "."} # { "." "." "."} # { "." "." "."} # { "." "." "."} ## {n 1} # {n 2} # { "." "." "."} # func nm # func nM ## {N 1} # {N 2} # { "." "." "."} # func Nm # func NM} right]

duplicate を使用して 2 ピクセル拡張:

11 11 11 12 1 m 1 M 1 M 1 M 11 11 11 12 1 m 1 M 1 M 1 M 11 11 11 12 1 m 1 M 1 M 1 M 21 21 21 22 2 m 2 M 2 M 2 M n 1 n 1 n 1 n 2 nm nM nM nM N 1 N 1 N 1 N 2 Nm NM NM NM N 1 N 1 N 1 N 2 Nm NM NM NM N 1 N 1 N 1 N 2 Nm NM NM NM left[ matrix {11 # 11 # 11 # 12 # dotslow # {1 m} # {1 M} # {1 M} # {1 M} ## 11 # 11 # 11 # 12 # dotslow # {1 m} # {1 M} # {1 M} # {1 M} ## 11 # 11 # 11 # 12 # dotslow # {1 m} # {1 M} # {1 M} # {1 M} ## 21 # 21 # 21 # 22 # dotslow # {2 m} # {2 M} # {2 M} # {2 M} ## dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow ## {n 1} # {n 1} # {n 1} # {n 2} # dotslow # func nm # func nM # func nM # func nM ## {N 1} # {N 1} # {N 1} # {N 2} # dotslow # func Nm # func NM # func NM # func NM ## {N 1} # {N 1} # {N 1} # {N 2} # dotslow # func Nm # func NM # func NM # func NM ## {N 1} # {N 1} # {N 1} # {N 2} # dotslow # func Nm # func NM # func NM # func NM} right]

wrap は、画像の反対側の端から色値を取得して 入力画像を拡張することを示す。

wrap を使用して 2 ピクセル拡張:

nm nM n1 n2 nm nM n1 n2 Nm NM N1 N2 Nm NM N1 N2 1m 1M 11 12 1m 1M 11 12 2m 2M 21 22 2m 2M 21 22 nm nM n1 n2 nm nM n1 n2 Nm NM N1 N2 Nm NM N1 N2 1m 1M 11 12 1m 1M 11 12 2m 2M 21 22 2m 2M 21 22 left[ matrix { nm # nM # n1 # n2 # dotslow # nm # nM # n1 # n2 ## Nm # NM # N1 # N2 # dotslow # Nm # NM # N1 # N2 ## 1m # 1M # 11 # 12 # dotslow # 1m # 1M # 11 # 12 ## 2m # 2M # 21 # 22 # dotslow # 2m # 2M # 21 # 22 ## dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow # dotslow ## nm # nM # n1 # n2 # dotslow # nm # nM # n1 # n2 ## Nm # NM # N1 # N2 # dotslow # Nm # NM # N1 # N2 ## 1m # 1M # 11 # 12 # dotslow # 1m # 1M # 11 # 12 ## 2m # 2M # 21 # 22 # dotslow # 2m # 2M # 21 # 22 } right]

none は、R、G、B、A のピクセル値を 0 として入力画像を拡張することを示す。

edgeMode初期値duplicate

アニメーション可能: はい。

kernelUnitLength = "<number-optional-number>"

最初の数値は <dx> 値である。2 番目の数値は <dy> 値である。<dy> 値 が指定されていない場合、<dx> と同じ値が既定値となる。kernelMatrix 内の連続する 列および行の間の、現在のフィルター単位(すなわち、属性 primitiveUnits の値によって決定される単位)での意図された距離を、それぞれ示す。kernelUnitLength に値を指定することにより、カーネルは スケーラブルな抽象座標系で定義される。kernelUnitLength が指定されていない場合、 既定値はオフスクリーンビットマップ内の 1 ピクセルであり、これはピクセルベースの座標 系であるため、スケーラブルでない可能性がある。表示媒体および ユーザーエージェント間である程度の一貫性を得るためには、kernelUnitLength に値を指定する必要がある。一部の 実装では、一時的なオフスクリーン画像のピクセルグリッドがカーネルのピクセルグリッドと一致する場合に、 最も一貫した結果と最速の性能が得られる。

負またはゼロの値が指定された場合は、代わりに既定値が使用される。

注: この属性は非推奨であり、削除される予定である。これは プラットフォームに依存しない結果を生成するための信頼できる方法を提供しない。この 仕様の将来のバージョンで、このユースケースが扱われる予定である。

アニメーション可能: はい。

preserveAlpha = "false | true"

false の値は、畳み込みが アルファチャンネルを含むすべてのチャンネルに適用されることを示す。この場合、指定されたピクセルに対する 畳み込み式ALPHAX,Y は:

ALPHAX,Y = (
SUM I=0 to [orderY-1] {
SUM J=0 to [orderX-1] {
SOURCE X-targetX+J, Y-targetY+I * kernelMatrixorderX-J-1, orderY-I-1
}
}
) / divisor + bias

"true" の値は、畳み込みが色チャンネルのみに適用されることを示す。この場合、 フィルターは一時的に色成分値の乗算を解除してカーネルを適用する。この 場合、指定されたピクセルに対する 畳み込み式ALPHAX,Y は:

ALPHAX,Y = SOURCEX,Y

preserveAlpha初期値false

アニメーション可能: はい。

9.10. フィルタープリミティブ feDiffuseLighting

名前: feDiffuseLighting
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素script、およびちょうど 1 つの 光源要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEDiffuseLightingElement

このフィルタープリミティブは、アルファチャンネルをバンプマップとして使用して画像を照明する。結果画像は、 光の色に基づき、すべての場所で alpha = 1.0 となる不透明な RGBA 画像である。照明計算は、 Phong 照明モデルの標準的な拡散成分に従う。結果画像は、光の色、 光の位置、および入力バンプマップの表面形状に依存する。

このフィルタープリミティブによって生成されたライトマップは、arithmetic feComposite 合成方式の multiply 項を使用して、 テクスチャー画像と組み合わせることができる。複数の 光源は、 テクスチャー画像に適用する前に、これらのライトマップを複数加算することでシミュレートできる。

以下の式では 3x3 フィルターを使用する。ピクセルに対して動作するため、このようなフィルターは本質的に 解像度に依存する。feDiffuseLighting が解像度に依存しない結果を生成するようにするには、 属性 kernelUnitLength に明示的な値を指定すべきである。

kernelUnitLength は、その他の属性と組み合わせて、 フィルター効果座標系(すなわち、primitiveUnits 属性によって確立される座標系)内に暗黙のピクセルグリッドを定義する。入力画像は そのピクセルが kernelUnitLength と一致するよう一時的に再スケーリングされる。3x3 フィルターは再サンプリングされた画像に適用される。フィルターの適用後、画像は 元の解像度に再サンプリングされる。

注: 利用可能な補間法の速度によっては、この選択は image-rendering プロパティの設定によって影響を受ける場合がある。

注: 実装は、適切な結果を生成するために不要な場合、 たとえば文書がズームアウトされ、kernelUnitLength がデバイスピクセルよりかなり 小さい場合などに、再サンプリングを最小化または省略する手法を選択してもよい。

以下の式では、Norm(Ax,Ay,Az) 関数を 次のように定義する:

Norm ( A x , A y , A z ) = A x 2 + A y 2 + A z 2 Norm(A_x,A_y,A_z) = sqrt { A_x^2+A_y^2+A_z^2}

注: ユーザーエージェントは、式を最適化し、極端な色値での 時間差を回避するために「高速逆平方根」を使用してもよい。タイミング攻撃の詳細については、 プライバシーおよびセキュリティに関する考慮事項の節を参照。

結果の RGBA 画像は次のように計算される:

Dr = kd * N.L * Lr
Dg = kd * N.L * Lg
Db = kd * N.L * Lb
Da = 1.0

ここで

kd = 拡散照明定数
N = 表面法線単位ベクトル。x と y の関数
L = 表面から光へ向かう単位ベクトル。点光源およびスポット光の場合は x と y の関数
Lr,Lg,Lb = 光の RGB 成分。スポット光の場合は x と y の関数

N は x と y の関数であり、次のように表面勾配に依存する:

入力アルファ画像 I(x,y) によって記述される表面は:

Z (x,y) = surfaceScale * I(x,y)

表面法線は Sobel 勾配 3x3 フィルターを使用して計算される。指定されたピクセルが 内部にあるか端にあるかに応じて異なるフィルターカーネルが使用される。それぞれの場合の 式は:

Nx (x,y) = - surfaceScale * FACTORx *
(Kx(0,0)*I(x-dx,y-dy) + Kx(1,0)*I(x,y-dy) + Kx(2,0)*I(x+dx,y-dy) +
Kx(0,1)*I(x-dx,y) + Kx(1,1)*I(x,y) + Kx(2,1)*I(x+dx,y) +
Kx(0,2)*I(x-dx,y+dy) + Kx(1,2)*I(x,y+dy) + Kx(2,2)*I(x+dx,y+dy))
Ny (x,y) = - surfaceScale * FACTORy *
(Ky(0,0)*I(x-dx,y-dy) + Ky(1,0)*I(x,y-dy) + Ky(2,0)*I(x+dx,y-dy) +
Ky(0,1)*I(x-dx,y) + Ky(1,1)*I(x,y) + Ky(2,1)*I(x+dx,y) +
Ky(0,2)*I(x-dx,y+dy) + Ky(1,2)*I(x,y+dy) + Ky(2,2)*I(x+dx,y+dy))
Nz (x,y) = 1.0

N = (Nx, Ny, Nz) / Norm((Nx,Ny,Nz))

これらの式では、dx および dy の値(たとえば I(x-dx,y-dy))は、 その点における表面の傾きを推定するための、指定された (x,y) 位置に対する差分を表す。 これらの差分は、属性 kernelUnitLength の値(明示的または暗黙的)によって決定される。

上/左隅: 上辺: 上/右隅:

FACTORx=2/(3*dx)
Kx =
| 0 0 0 |
| 0 -2 2 |
| 0 -1 1 |

FACTORy=2/(3*dy)
Ky =
| 0 0 0 |
| 0 -2 -1 |
| 0 2 1 |

FACTORx=1/(3*dx)
Kx =
| 0 0 0 |
| -2 0 2 |
| -1 0 1 |

FACTORy=1/(2*dy)
Ky =
| 0 0 0 |
| -1 -2 -1 |
| 1 2 1 |

FACTORx=2/(3*dx)
Kx =
| 0 0 0 |
| -2 2 0 |
| -1 1 0 |

FACTORy=2/(3*dy)
Ky =
| 0 0 0 |
| -1 -2 0 |
| 1 2 0 |

左列: 内部ピクセル: 右列:

FACTORx=1/(2*dx)
Kx =
| 0 -1 1 |
| 0 -2 2 |
| 0 -1 1 |

FACTORy=1/(3*dy)
Ky =
| 0 -2 -1 |
| 0 0 0 |
| 0 2 1 |

FACTORx=1/(4*dx)
Kx =
| -1 0 1 |
| -2 0 2 |
| -1 0 1 |

FACTORy=1/(4*dy)
Ky =
| -1 -2 -1 |
| 0 0 0 |
| 1 2 1 |

FACTORx=1/(2*dx)
Kx =
| -1 1 0|
| -2 2 0|
| -1 1 0|

FACTORy=1/(3*dy)
Ky =
| -1 -2 0 |
| 0 0 0 |
| 1 2 0 |

下/左隅: 下辺: 下/右隅:

FACTORx=2/(3*dx)
Kx =
| 0 -1 1 |
| 0 -2 2 |
| 0 0 0 |

FACTORy=2/(3*dy)
Ky =
| 0 -2 -1 |
| 0 2 1 |
| 0 0 0 |

FACTORx=1/(3*dx)
Kx =
| -1 0 1 |
| -2 0 2 |
| 0 0 0 |

FACTORy=1/(2*dy)
Ky =
| -1 -2 -1 |
| 1 2 1 |
| 0 0 0 |

FACTORx=2/(3*dx)
Kx =
| -1 1 0 |
| -2 2 0 |
| 0 0 0 |

FACTORy=2/(3*dy)
Ky =
| -1 -2 0 |
| 1 2 0 |
| 0 0 0 |

画像サンプルから光へ向かう単位ベクトル L は、次のように計算される:

無限遠の 光源では一定である:

Lx = cos(azimuth)*cos(elevation)
Ly = sin(azimuth)*cos(elevation)
Lz = sin(elevation)

点光源およびスポット光では、位置の関数である:

Lx = Lightx - x
Ly = Lighty - y
Lz = Lightz - Z(x,y)

L = (Lx, Ly, Lz) / Norm(Lx, Ly, Lz)

ここで Lightx、Lighty、Lightz は入力光源位置である。

光の色ベクトル Lr,Lg,Lb は、スポット光の場合のみ位置の関数である:

Lr = Lightr*pow((-L.S),specularExponent)
Lg = Lightg*pow((-L.S),specularExponent)
Lb = Lightb*pow((-L.S),specularExponent)

ここで S は、光源から x-y 平面内の点 (pointsAtX, pointsAtY, pointsAtZ) へ向かう単位ベクトルである:

Sx = pointsAtX - Lightx
Sy = pointsAtY - Lighty
Sz = pointsAtZ - Lightz

S = (Sx, Sy, Sz) / Norm(Sx, Sy, Sz)

L.S が正の場合、光は存在しない。(Lr = Lg = Lb = 0)。limitingConeAngle が指定されている場合、-L.S < cos(limitingConeAngle) も光が存在しないことを示す。

属性の定義:

surfaceScale = "<number>"

Ain = 1 のときの表面の高さ。

属性が指定されていない場合、値 1 が指定されたものとして効果が適用される。

アニメーション可能: はい。

diffuseConstant = "<number>"

Phong 照明モデルにおける kd。SVG では、これは任意の非負の数値にできる。

属性が指定されていない場合、値 1 が指定されたものとして効果が適用される。

アニメーション可能: はい。

kernelUnitLength = "<number-optional-number>"

最初の数値は <dx> 値である。2 番目の数値は <dy> 値である。<dy> 値 が指定されていない場合、<dx> と同じ値が既定値となる。表面法線 計算式における dxdy の現在のフィルター単位(すなわち、属性 primitiveUnits の値によって決定される単位)での意図された距離を、それぞれ示す。kernelUnitLength に値を指定することで、 カーネルはスケーラブルな抽象座標系で定義される。kernelUnitLength が 指定されていない場合、dxdy の値は、指定された (x,y) 位置に対して非常に小さい差分を表すべきであり、一部の場合には、 ピクセルベースの座標系である中間画像のオフスクリーンビットマップ内の 1 ピクセルとして実装されることがあり、そのためスケーラブルでない可能性がある。表示媒体およびユーザーエージェント間である程度の一貫性を得るためには、kernelUnitLength に値を指定する必要がある。

負またはゼロの値が指定された場合、代わりに既定値が使用される。

注: この属性は非推奨であり、削除される予定である。これは プラットフォームに依存しない結果を生成するための信頼できる方法を提供しない。この 仕様の将来のバージョンで、このユースケースが扱われる予定である。

アニメーション可能: はい。

光源は、 子要素 feDistantLightfePointLight、または feSpotLight のいずれかによって定義される。光の色はプロパティ lighting-color によって指定される。

9.11. フィルタープリミティブ feDisplacementMap

名前: feDisplacementMap
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEDisplacementMapElement

実装が 仕様と一致していない。 <https://github.com/w3c/csswg-drafts/issues/113>

このフィルタープリミティブは、in2 の画像のピクセル値を使用して、in の画像を空間的に変位させる。実行される変換は次のとおり:

P'(x,y) ← P( x + scale * (XC(x,y) - .5), y + scale * (YC(x,y) - .5))

ここで P(x,y) は入力画像 in であり、P'(x,y) は出力である。XC(x,y) および YC(x,y) は、xChannelSelector および yChannelSelector によって指定されたチャンネルの成分値である。たとえば、 in2 の R 成分を使用して x 方向の変位を制御し、Image2 の G 成分を使用して y 方向の変位を制御するには、xChannelSelector を "R" に、yChannelSelector を "G" に設定する。

変位マップ in2 は、実行されるマッピングの逆変換を定義する。

入力画像 in は、このフィルタープリミティブでは乗算済みのままにする。 in2 のピクセル値を使用する計算は、乗算されていない色 値を使用して実行される。

このフィルターは入力に対して任意の非局所的な効果を持つことがあり、処理パイプライン内で 大量のバッファリングを必要とする可能性がある。ただし、この定式化では、必要となる中間バッファリング量は x または y のいずれかの変位の最大範囲を表す scale によって決定できる。

このフィルターを適用する場合、ソースピクセル位置は複数のソースピクセルの間に位置することが多い。

注: 利用可能な補間法の速度によっては、この選択は image-rendering プロパティの設定によって影響を受ける場合がある。

注: この仕様の将来のバージョンでは、ソース画像を歪ませる際に使用する 補間方式を定義し、UA 間でレンダリング結果の相互運用性を高める予定である。

color-interpolation-filters プロパティは、in2 ソース画像にのみ適用され、in ソース画像には適用されない。in ソース画像は現在の 色空間のままでなければならない。

属性の定義:

scale = "<number>"

変位のスケール係数。量は primitiveUnits 属性によって filter 要素上に確立される座標系で表される。

この属性の値が 0 の場合、この操作は ソース画像に影響を与えない。

scale初期値0

アニメーション可能: はい。

xChannelSelector = "R | G | B | A"

in2 のどのチャンネルを使用して in 内のピクセルを x 軸に沿って変位させるかを示す。

xChannelSelector初期値A

アニメーション可能: はい。

yChannelSelector = "R | G | B | A"

in2 のどのチャンネルを使用して in 内のピクセルを y 軸に沿って変位させるかを示す。

yChannelSelector初期値A

アニメーション可能: はい。

in2 = "in 属性を参照)"

属性 in の画像内のピクセルを変位させるために使用される第 2 入力画像。in 属性の定義を参照。

アニメーション可能: はい。

9.12. フィルタープリミティブ feDropShadow

名前: feDropShadow
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEDropShadowElement

このフィルターは入力画像のドロップシャドウを生成する。これは略記フィルターであり、 他の フィルタープリミティブの組み合わせによって定義される。実装が より容易に最適化できることが期待される。

feDropShadow フィルタープリミティブの結果は、次と等価である:

<feGaussianBlur in="alpha-channel-of-feDropShadow-in"   stdDeviation="stdDeviation-of-feDropShadow"/>
<feOffset dx="dx-of-feDropShadow"   dy="dy-of-feDropShadow" result="offsetblur"/>
<feFlood flood-color="flood-color-of-feDropShadow"  flood-opacity="flood-opacity-of-feDropShadow"/>
<feComposite in2="offsetblur" operator="in"/>
<feMerge>
  <feMergeNode/>
  <feMergeNode in="in-of-feDropShadow"/>
</feMerge>

上記を手順に分けると:

  1. feDropShadow フィルター プリミティブへの入力のアルファチャンネルと、feDropShadow 上の stdDeviation を取得し、次の feGaussianBlur が適用されたものとして処理する:

    <feGaussianBlur in="alpha-channel-of-feDropShadow-in" stdDeviation="stdDeviation-of-feDropShadow"/>
    
  2. 手順 1 の結果を、dx および dy により、feDropShadow 要素上で指定されたとおりにオフセットする。これは、これらのパラメーターを持つ feOffset を適用することと等価である:

    <feOffset dx="dx-of-feDropShadow" dy="dy-of-feDropShadow" result="offsetblur"/>
    
  3. feDropShadow 上で指定された flood-color および flood-opacity を持つ feFlood 要素が適用されたものとして処理する:

    <feFlood flood-color="flood-color-of-feDropShadow" flood-opacity="flood-opacity-of-feDropShadow"/>
    
  4. 手順 3 の feFlood の結果と、手順 2 の feOffset の結果を、operator="in" を持つ feComposite フィルター プリミティブが適用されたものとして合成する:

    <feComposite in2="offsetblur" operator="in"/>
    
  5. 最後に、次の feMerge が実行されたものとして、前の手順の結果をマージする:

    <feMerge>
      <feMergeNode/>
      <feMergeNode in="in-of-feDropShadow"/>
    </feMerge>
    

注: feDropShadow フィルタープリミティブの定義では、 等価なツリーに展開できるとされているが、そのように実装する必要はない。 ユーザーエージェントは、すべての手順を個別に実行する必要をなくすことで処理を最適化できることが期待される。

DOM インターフェイス SVGFEDropShadowElement を除き、 feDropShadow フィルタープリミティブの内部にアクセスする方法はない。つまり、フィルタープリミティブが 等価なツリーとして実装される場合、そのツリーを DOM に公開してはならない。

属性の定義:

dx = "<number>"

ドロップシャドウの x オフセット。

dx初期値2

この属性は、その後、内部の feOffset 要素の dx 属性に転送される。

アニメーション可能: はい。

dy = "<number>"

ドロップシャドウの y オフセット。

dy初期値2

この属性は、その後、内部の feOffset 要素の dy 属性に転送される。

アニメーション可能: はい。

stdDeviation = "<number-optional-number>"

ドロップシャドウのぼかし操作に使用する標準偏差。

stdDeviation初期値2

この属性は、その後、内部の feGaussianBlur 要素の stdDeviation 属性に転送される。

アニメーション可能: はい。

9.13. フィルタープリミティブ feFlood

名前: feFlood
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEFloodElement

このフィルタープリミティブは、プロパティ flood-color および flood-opacity の色値と不透明度値で塗りつぶされた矩形を生成する。この矩形は、 feFlood 要素によって確立された フィルタープリミティブ部分領域と同じ大きさである。

9.13.1. flood-color プロパティ

名前: flood-color
値: <color>
初期値: black
適用対象: feFlood および feDropShadow 要素
継承: しない
パーセンテージ: 該当なし
算出値: 指定どおり
正規順序: 文法に従う
メディア: 視覚
アニメーション可能: 算出値によって

flood-color プロパティは、現在の フィルタープリミティブ部分領域を塗りつぶすために使用する色を示す。

flood-color プロパティは、SVG 要素の プレゼンテーション 属性である。

9.13.2. flood-opacity プロパティ

名前: flood-opacity
値: <alpha-value>
初期値: 1
適用対象: feFlood および feDropShadow 要素
継承: しない
パーセンテージ: 該当なし
算出値: 指定値を数値に変換し、[0,1] の範囲にクランプした値
正規順序: 文法に従う
メディア: 視覚
アニメーション可能: 算出値によって

flood-opacity プロパティは、 フィルタープリミティブ部分領域全体で使用する不透明度値を定義する。flood-color の値にアルファチャンネルが含まれる場合、そのアルファチャンネルは flood-opacity プロパティの算出値と乗算される。

flood-opacity プロパティは、SVG 要素の プレゼンテーション 属性である。

9.14. フィルタープリミティブ feGaussianBlur

名前: feGaussianBlur
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEGaussianBlurElement

このフィルタープリミティブは、入力画像にガウスぼかしを適用する。

ガウスぼかしカーネルは、正規化された畳み込みの近似である:

G(x,y) = H(x)I(y)

ここで

H(x) = exp(-x2/ (2s2)) / sqrt(2π * s2)

および

I(y) = exp(-y2/ (2t2)) / sqrt(2π * t2)

"s" は x 方向の標準偏差、"t" は y 方向の標準偏差であり、stdDeviation によって指定される。

stdDeviation の値は 1 個または 2 個の 数値にできる。2 個の数値が指定された場合、最初の数値は現在の座標系の x 軸に沿った標準偏差値を表し、2 番目の値は Y 方向の標準偏差を表す。1 個の数値が指定された場合、その値が X と Y の両方に使用される。

stdDeviation に 1 つの値しか指定されていない場合でも、 分離可能な畳み込みとして実装できる。

"s" が大きい値(s >= 2.0)の場合、近似を使用できる。連続する 3 回のボックスぼかしにより、 区分的二次の畳み込みカーネルが構築され、ガウスカーネルをおよそ 3% 以内の誤差で近似する。

let d = floor(s * 3 * sqrt(2 * π) / 4 + 0.5)

... d が奇数の場合、出力ピクセルを中心とするサイズ "d" のボックスぼかしを 3 回使用する。

... d が偶数の場合、サイズ "d" のボックスぼかしを 2 回(1 回目は出力 ピクセルとその左側のピクセルとの境界を中心とし、2 回目は出力ピクセルと その右側のピクセルとの境界を中心とする)と、出力ピクセルを中心とするサイズ "d+1" のボックスぼかしを 1 回使用する。

近似式は "t" にも同様に適用される。

この操作は、組み込み入力 SourceAlpha によって生成されるような、アルファのみの画像に対して行われることが多い。 実装はこれを検出して、単一チャンネルの場合を最適化してもよい。この最適化が何らかのプライバシー上の懸念を生じさせる場合は、 省略しなければならない。(タイミング攻撃の詳細については、プライバシーおよびセキュリティに関する考慮事項の節を参照。) 入力が無限の広がりを持ち、一定である場合(たとえば FillPaint で fill が単色の場合)、この操作は効果を持たない。入力が無限の広がりを持ち、fill が単色であるフィルター結果が feTile への入力である場合、フィルターは 周期境界条件で評価される。

属性の定義:

stdDeviation = "<number-optional-number>"

ぼかし操作の標準偏差。2 つの <number> が指定された場合、最初の数値は filter 要素上の属性 primitiveUnits によって確立される座標系の x 軸に沿った 標準偏差値を表す。2 番目の値は Y 方向の標準偏差を表す。1 つの数値が指定された場合、 その値が X と Y の両方に使用される。

負の値またはゼロの値は、指定されたフィルタープリミティブの効果を無効にする(すなわち、 結果はフィルター入力画像となる)。

stdDeviation が X または Y の一方だけで 0 の場合、ぼかしは 0 でない値を持つ 方向にのみ適用される。

stdDeviation初期値0

アニメーション可能: はい。

edgeMode = "duplicate | wrap | none"

カーネルが入力画像の端またはその付近に配置されたときに行列演算を適用できるよう、 必要に応じて色値で入力画像をどのように拡張するかを決定する。

duplicate は、入力 画像の各境界にある色値を複製することにより、必要に応じて各境界に沿って入力画像を拡張することを示す。

元の N 行 M 列の画像。ここで m=M-1、n=N-1:

wrap は、画像の反対側の端から 色値を取得して入力画像を拡張することを示す。

none は、R、G、B、A のピクセル値を 0 として入力画像を拡張することを示す。

edgeMode初期値none

アニメーション可能: はい。

この章の冒頭にあるでは、ドロップシャドウ効果を生成するために feGaussianBlur フィルター プリミティブを使用している。

9.15. フィルタープリミティブ feImage

名前: feImage
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animateanimateTransformscriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEImageElement

このフィルタープリミティブは、この filter 要素の外部にあるグラフィックを参照し、それを読み込むかレンダリングして RGBA ラスターにし、フィルタープリミティブの結果とする。

このフィルタープリミティブは外部画像を参照することも、別の SVG の一部への参照にすることもできる。 グラフィックが外部ソースから来る点を除き、組み込み画像ソース SourceGraphic に似た画像を生成する。

href が JPEG、PNG、SVG ファイルなどの独立した画像リソースを参照する場合、 画像リソースは image 要素の動作に従ってレンダリングされる。それ以外の場合、参照されたリソースは use 要素の動作に従ってレンダリングされる。いずれの場合も、現在のユーザー座標系は filter 要素上の属性 primitiveUnits の値に依存する。 feImage 要素上の preserveAspectRatio 属性の処理は、image 要素の場合と同一である。

href 参照が空の画像(幅または高さが 0)である場合、 ダウンロードに失敗した場合、存在しない場合、または表示できない場合(たとえば、サポートされる 画像形式でない場合)、フィルタープリミティブ部分領域は透明な黒で塗りつぶされる。

参照された画像をデバイス座標系に一致させるために再サンプリングする必要がある場合、 高品質のビューアーでは、たとえばバイリニアやバイキュービックなど、適切な 補間手法を使用することが推奨される。 利用可能な補間法の速度によっては、この選択は image-rendering プロパティの設定によって影響を受ける場合がある。

属性の定義:

xlink:href = "<url>"

href 属性を参照。

アニメーション可能: はい。

注: この xlink:href 属性は非推奨であり、 新しいコンテンツでは使用すべきではない。後方互換性のためにのみ含まれている。作者は 代わりに href 属性を使用すべきである。

href = "<url>"

画像リソースまたは要素への <url>xlink:hrefhref 属性の両方が指定された場合、後者が 前者の定義を上書きする。

アニメーション可能: はい。

preserveAspectRatio = "[defer] <align> [<meetOrSlice>]"

preserveAspectRatio を参照。

preserveAspectRatio初期値xMidYMid meet

アニメーション可能: はい。

crossorigin = "anonymous | use-credentials"

crossorigin 属性は CORS 設定属性である。その目的は、クロスオリジンアクセスを許可するサードパーティサイトの画像を feDisplacementMap で使用できるようにすることである。定義については、crossorigin 属性の img タグに関する定義 [HTML5]、およびこの仕様の プライバシーおよびセキュリティに関する 考慮事項の節を参照。

アニメーション可能: いいえ。

次の例は、画像がオブジェクトに対してどのように配置されるかを示す。 左から右へ:

<svg width="600" height="250" viewBox="0 0 600 250"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>feImage の例 - feImage の使用例</title>
  <desc>feImage を使用する 3 つの例。1 つ目は
        既定のレンダリングを示し、2 つ目は画像を
        ボックスに合わせたもの、3 つ目は画像を
        移動してクリップしたものを示す。</desc>
  <defs>
    <filter id="Default">
      <feImage xlink:href="smiley.png" />
    </filter>
    <filter id="Fitted" primitiveUnits="objectBoundingBox">
      <feImage xlink:href="smiley.png"
         x="0" y="0" width="100%" height="100%"
         preserveAspectRatio="none"/>
    </filter>
    <filter id="Shifted">
      <feImage xlink:href="smiley.png"
         x="500" y="5"/>
    </filter>
  </defs>
  <rect fill="none" stroke="blue"
        x="1" y="1" width="598" height="248"/>
  <g>
    <rect x="50"  y="25" width="100" height="200" filter="url(#Default)"/>
    <rect x="50"  y="25" width="100" height="200" fill="none" stroke="green"/>
    <rect x="250" y="25" width="100" height="200" filter="url(#Fitted)"/>
    <rect x="250" y="25" width="100" height="200" fill="none" stroke="green"/>
    <rect x="450" y="25" width="100" height="200" filter="url(#Shifted)"/>
    <rect x="450" y="25" width="100" height="200" fill="none" stroke="green"/>
  </g>
</svg>
feImage の例 — feImage の使用例

feImage の例

この例を SVG として表示

9.16. フィルタープリミティブ feMerge

名前: feMerge
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素feMergeNodescript 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEMergeElement

このフィルタープリミティブは、over 演算子を使用して入力画像レイヤーを互いに重ねて合成する。 Input1(最初の feMergeNode 子要素に対応)が最下層に、最後に指定された 入力 InputN(最後の feMergeNode 子要素に対応)が最上層になる。

多くの効果では、最終的な出力画像を生成するために多数の中間レイヤーが生成される。このフィルター を使用すると、それらを 1 つの画像にまとめることができる。これは n-1 個の Composite フィルターを使用しても実現できるが、 この一般的な操作をこの形式で利用できる方が便利であり、実装にも 追加の柔軟性を与える。

feMerge 要素は任意の数の feMergeNode 子要素を持つことができ、それぞれが in 属性を持つ。

feMerge の標準的な実装では、効果全体を 1 つの RGBA レイヤーにレンダリングし、その後、 得られたレイヤーを出力デバイスにレンダリングする。特定の場合(特に出力デバイス自体が 連続階調デバイスである場合)には、マージは結合的であるため、 効果を一度に 1 レイヤーずつ評価し、各レイヤーを下から上へ個別に出力デバイスに レンダリングすることで十分な近似となる場合がある。

最上位の画像入力が SourceGraphic であり、この feMerge がフィルター内の最後のフィルタープリミティブである場合、 実装はそこまでのレイヤーをレンダリングし、その上に SourceGraphic をベクター 記述から直接レンダリングすることが推奨される。

この章の冒頭にあるでは、2 つの中間フィルター結果を合成するために feMerge フィルタープリミティブを使用している。

9.16.1. マージノード feMergeNode

名前: feMergeNode
カテゴリー: なし。
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEMergeNodeElement

9.17. フィルタープリミティブ feMorphology

名前: feMorphology
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEMorphologyElement

このフィルタープリミティブは、アートワークを「太く」または「細く」する。特にアルファチャンネルを太く または細くする場合に有用である。

膨張(または収縮)カーネルは、幅 2*x-radius、高さ 2*y-radius の矩形である。膨張では、出力ピクセルは 入力画像のカーネル矩形内の対応する R,G,B,A 値について、成分ごとの最大値となる。収縮では、出力ピクセルは 入力画像のカーネル矩形内の対応する R,G,B,A 値について、成分ごとの最小値となる。

この操作は、組み込み入力 SourceAlpha によって生成されるような、アルファのみの画像に対して行われることが多い。その場合、実装は 単一チャンネルの場合を最適化してもよい。この最適化が何らかのプライバシー上の懸念につながる場合は 省略しなければならない。(詳細については プライバシーおよびセキュリティに関する考慮事項の節を参照。)

入力が無限の広がりを持ち、一定である場合(たとえば FillPaint で fill が単色の場合)、この操作は効果を持たない。入力が無限の広がりを持ち、フィルター結果が feTile への入力である場合、フィルターは 周期境界条件で評価される。

feMorphology は乗算済みの色値に対して動作するため、 常にアルファチャンネル以下の色値が結果となる。

属性の定義:

operator = "erode | dilate"

ソースグラフィックを収縮(すなわち細くする)するか、膨張(太くする)するかを示すキーワード。

operator初期値erode

アニメーション可能: はい。

radius = "<number-optional-number>"

操作の半径。2 つの <number> が指定された場合、最初の数値は x-radius を表し、2 番目の値は y-radius を表す。1 つの数値が指定された場合、その値が X と Y の両方に使用される。値は filter 要素上の属性 primitiveUnits によって確立される座標系で表される。

負の値またはゼロの値は、指定されたフィルタープリミティブの効果を無効にする(すなわち、結果は フィルター入力画像となる)。

radius初期値0

アニメーション可能: はい。

<svg width="5cm" height="7cm" viewBox="0 0 700 500"
     xmlns="http://www.w3.org/2000/svg">
  <title>feMorphology の例 - erode と dilate の例</title>
  <desc>輪郭線として描画された 5 つのテキスト文字列。
        1 つ目にはフィルターを適用しない。2 つ目と 3 つ目は 'erode' を使用する。
        4 つ目と 5 つ目は 'dilate' を使用する。</desc>
  <defs>
    <filter id="Erode3">
      <feMorphology operator="erode" in="SourceGraphic" radius="3" />
    </filter>
    <filter id="Erode6">
      <feMorphology operator="erode" in="SourceGraphic" radius="6" />
    </filter>
    <filter id="Dilate3">
      <feMorphology operator="dilate" in="SourceGraphic" radius="3" />
    </filter>
    <filter id="Dilate6">
      <feMorphology operator="dilate" in="SourceGraphic" radius="6" />
    </filter>
  </defs>
  <rect fill="none" stroke="blue" stroke-width="2"
        x="1" y="1" width="698" height="498"/>
  <g isolation="isolate" >
    <g font-family="Verdana" font-size="75"
              fill="none" stroke="black" stroke-width="6" >
      <text x="50" y="90">フィルターなし</text>
      <text x="50" y="180" filter="url(#Erode3)" >Erode 半径 3</text>
      <text x="50" y="270" filter="url(#Erode6)" >Erode 半径 6</text>
      <text x="50" y="360" filter="url(#Dilate3)" >Dilate 半径 3</text>
      <text x="50" y="450" filter="url(#Dilate6)" >Dilate 半径 6</text>
    </g>
  </g>
</svg>
feMorphology の例

feMorphology の例

この例を SVG として表示

9.18. フィルタープリミティブ feOffset

名前: feOffset
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEOffsetElement

このフィルタープリミティブは、指定されたベクトルにより、画像空間内の現在位置に対して 入力画像をオフセットする。

これはドロップシャドウなどの効果に重要である。

このフィルターを適用する場合、出力位置がデバイス空間で 1 ピクセル未満の量だけオフセットされることがある。 この場合、高品質のビューアーは たとえばバイリニアやバイキュービックなど、適切な補間手法を使用すべきである。 これは特に、 この補間によって画像の移動が視覚的に滑らかになる動的ビューアーに推奨される。 静的ビューアーでは、それほど重要ではない。作者の意図を判断するために image-rendering プロパティの設定に十分注意すべきである。

属性の定義:

dx = "<number>"

入力グラフィックを x 軸に沿ってオフセットする量。オフセット量は filter 要素上の属性 primitiveUnits によって確立される 座標系で表される。

dx初期値0

アニメーション可能: はい。

dy = "<number>"

入力グラフィックを y 軸に沿ってオフセットする量。オフセット量は filter 要素上の属性 primitiveUnits によって確立される 座標系で表される。

dy初期値0

アニメーション可能: はい。

この章の冒頭にあるでは、ドロップシャドウを元のソースグラフィックからオフセットするために feOffset フィルタープリミティブを使用している。

9.19. フィルタープリミティブ feSpecularLighting

名前: feSpecularLighting
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素script、およびちょうど 1 つの 光源要素を任意の順序で。
属性:
DOM インターフェイス: SVGFESpecularLightingElement

このフィルタープリミティブは、アルファチャンネルをバンプマップとして使用してソースグラフィックを照明する。結果画像は 光の色に基づく RGBA 画像である。照明計算は Blinn-Phong 照明モデルの標準的な鏡面反射成分に従う。結果画像は、光の色、光の位置、および入力バンプマップの表面 形状に依存する。照明計算の結果が加算される。このフィルタープリミティブは、 観察者が z 方向の無限遠にいるものと仮定する(すなわち、視線方向の単位ベクトルは すべての場所で (0,0,1) である)。

注: このフィルタープリミティブは、照明計算の 鏡面反射部分を含む画像を生成する。このようなマップは、arithmetic feComposite 方式の add 項を使用して、第 2 のフィルタープリミティブからのテクスチャー と組み合わせることを意図している。複数の 光源は、テクスチャー画像に適用する前に これらのライトマップを複数加算することでシミュレートできる。

結果の RGBA 画像は次のように計算される:

Sr = ks * pow(N.H, specularExponent) * Lr
Sg = ks * pow(N.H, specularExponent) * Lg
Sb = ks * pow(N.H, specularExponent) * Lb
Sa = max(Sr, Sg, Sb)

ここで

ks = 鏡面照明定数
N = 表面法線単位ベクトル。x と y の関数
H = 視線単位ベクトルと光単位ベクトルの間の「中間」単位ベクトル

Lr,Lg,Lb = 光の RGB 成分

N および (Lr, Lg, Lb) の定義については feDiffuseLighting を参照。

H の定義は、一定の視線ベクトル E = (0,0,1) という仮定を反映している:

H = (L + E) / Norm(L+E)

ここで L は光の単位ベクトルである。

feDiffuseLighting とは異なり、feSpecularLighting フィルターは不透明ではない画像を生成する。これは鏡面反射結果 (Sr,Sg,Sb,Sa) がテクスチャー画像に加算されることを意図しているためである。 結果のアルファチャンネルは色成分の最大値であるため、鏡面光が 0 の場所では 画像に追加の被覆は加わらず、完全に白いハイライトは不透明度を加える。

feDiffuseLightingfeSpecularLighting フィルターは一緒に適用されることが多い。実装はこれを検出し、2 回ではなく 1 回の処理で両方のマップを計算してもよい。

属性の定義:

surfaceScale = "<number>"

Ain = 1 のときの表面の高さ。

surfaceScale初期値1

アニメーション可能: はい。

specularConstant = "<number>"

Phong 照明モデルにおける ks。SVG では、これは任意の非負の数値にできる。

specularConstant初期値1

アニメーション可能: はい。

specularExponent = "<number>"

鏡面反射項の指数。大きいほど「光沢」が強くなる。

specularExponent初期値1

アニメーション可能: はい。

kernelUnitLength = "<number-optional-number>"

最初の数値は <dx> 値である。2 番目の数値は <dy> 値である。

<dy> 値が指定されていない場合、<dx> と同じ値が既定値となる。表面法線 計算式における dxdy の現在のフィルター単位(すなわち、属性 primitiveUnits の値によって決定される単位)での意図された距離を、それぞれ示す。kernelUnitLength に値を指定することで、 カーネルはスケーラブルな抽象座標系で定義される。

kernelUnitLength が 指定されていない場合、dxdy の値は、指定された (x,y) 位置に対して非常に小さい差分を表すべきであり、一部の場合には、 ピクセルベースの座標系である中間画像のオフスクリーンビットマップ内の 1 ピクセルとして実装されることがあり、そのためスケーラブルでない可能性がある。表示媒体およびユーザーエージェント間である程度の一貫性を得るためには、kernelUnitLength に値を指定する必要がある。

アニメーション可能: はい。

光源は子要素 feDistantLightfePointLight、または feSpotLight のいずれかによって定義される。光の色は プロパティ lighting-color によって指定される。

この章の冒頭にあるでは、非常に反射性の高い 3D の発光効果を実現するために feSpecularLighting フィルタープリミティブを使用している。

9.20. フィルタープリミティブ feTile

名前: feTile
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFETileElement

このフィルタープリミティブは、入力画像を繰り返しタイル状に並べたパターンで対象矩形を塗りつぶす。対象 矩形は、feTile 要素によって確立された フィルタープリミティブ部分領域と同じ大きさである。

通常、入力画像は参照タイルを定義するために、独自の フィルタープリミティブ 部分領域を持つよう定義される。feTile は、対象矩形を完全に 塗りつぶすように参照タイルを X と Y の両方向に複製する。各タイルの上/左隅は (x + i*width, y + j*height) の位置にあり、ここで (x,y) は入力 画像の フィルタープリミティブ部分領域の上/左を表し、 widthheight は入力画像の フィルタープリミティブ部分領域の幅と高さを表し、ij は任意の整数値にできる。多くの場合、繰り返しパターン効果を得るために、入力画像は フィルタープリミティブ部分領域feTile より小さくする。

実装者は、タイル間のアーティファクトを避けるために、タイル画像を構築する際に適切な措置を講じなければならない。 特に、ユーザー座標からデバイス座標への変換にシアーおよび/または回転が含まれる場合に重要である。注意しないと、 隣接するタイルがそれぞれ特定のピクセルと部分的に重なる状態で描画されることによる相互作用のため、 補間によってタイル端のピクセルの不透明度値が期待より低くまたは高くなる可能性がある。

9.21. フィルタープリミティブ feTurbulence

名前: feTurbulence
カテゴリー: フィルター プリミティブ
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFETurbulenceElement

このフィルタープリミティブは Perlin turbulence 関数を使用して画像を生成する。雲や大理石のような 人工テクスチャーを合成できる。Perlin turbulence 関数の詳細な説明については、 "Texturing and Modeling" [TaM] を参照。結果画像は このフィルタープリミティブの フィルタープリミティブ部分領域全体を塗りつぶす。

1 オクターブのみを合成することで、帯域制限されたノイズを生成できる。

以下の C コードは、このフィルター効果に使用される正確なアルゴリズムを示す。フィルタープリミティブ 部分領域は、引数 fTileX、fTileY、fTileWidth、fTileHeight として渡す。

fractalSum の場合、-1 から 1 の範囲を目標とする turbFunctionResult が得られる(実際の結果は 場合によってこの範囲を超える可能性がある)。色値またはアルファ値に変換するには、 colorValue = (turbFunctionResult + 1) / 2 という式を使用し、その後 0 から 1 の範囲にクランプする。

turbulence の場合、0 から 1 の範囲を目標とする turbFunctionResult が得られる(実際の結果は 場合によってこの範囲を超える可能性がある)。色値またはアルファ値に変換するには、 colorValue = turbFunctionResult という式を使用し、その後 0 から 1 の範囲にクランプする。

擬似乱数の適用には次の順序を使用する。初期 seed 値は seed 属性に基づいて計算される。その後、実装は R の格子点を計算し、最後に生成された擬似乱数を基準に追加の擬似乱数を取得し続けて G の格子点を計算し、B と A についても同様に処理する。

生成される色値およびアルファ値は color-interpolation-filters プロパティによって決定される色空間内にある:

/* [1, 2**31 - 2] の範囲の結果を生成する。
アルゴリズムは次のとおり: r = (a * r) mod m
ここで a = 16807、m = 2**31 - 1 = 2147483647
[Park & Miller], CACM vol. 31 no. 10 p. 1195, Oct. 1988 を参照
テスト: 元の seed が 1 の場合、アルゴリズムは
10,000 番目に生成される数として 1043618065 を生成するはずである。
*/
#define RAND_m 2147483647 /* 2**31 - 1 */
#define RAND_a 16807 /* 7**5; m の原始根 */
#define RAND_q 127773 /* m / a */
#define RAND_r 2836 /* m % a */
long setup_seed(long lSeed)
{
  if (lSeed <= 0) lSeed = -(lSeed % (RAND_m - 1)) + 1;
  if (lSeed > RAND_m - 1) lSeed = RAND_m - 1;
  return lSeed;
}
long random(long lSeed)
{
  long result;
  result = RAND_a * (lSeed % RAND_q) - RAND_r * (lSeed / RAND_q);
  if (result <= 0) result += RAND_m;
  return result;
}
#define BSize 0x100
#define BM 0xff
#define PerlinN 0x1000
#define NP 12 /* 2^PerlinN */
#define NM 0xfff
static uLatticeSelector[BSize + BSize + 2];
static double fGradient[4][BSize + BSize + 2][2];
struct StitchInfo
{
  int nWidth; // ステッチのために折り返す際に減算する量。
  int nHeight;
  int nWrapX; // 折り返す最小値。
  int nWrapY;
};
static void init(long lSeed)
{
  double s;
  int i, j, k;
  lSeed = setup_seed(lSeed);
  for(k = 0; k < 4; k++)
  {
    for(i = 0; i < BSize; i++)
    {
      uLatticeSelector[i] = i;
      do {
         for (j = 0; j < 2; j++)
           fGradient[k][i][j] = (double)(((lSeed = random(lSeed)) % (BSize + BSize)) - BSize) / BSize;
      } while(fGradient[k][i][0] == 0 && fGradient[k][i][1] == 0);
      s = double(sqrt(fGradient[k][i][0] * fGradient[k][i][0] + fGradient[k][i][1] * fGradient[k][i][1]));
      if (s > 1) {
          i--; // 現在のランダムベクトルを破棄し、もう一度試す。
          continue;
      }
      fGradient[k][i][0] /= s;
      fGradient[k][i][1] /= s;
    }
  }
  while(--i)
  {
    k = uLatticeSelector[i];
    uLatticeSelector[i] = uLatticeSelector[j = (lSeed = random(lSeed)) % BSize];
    uLatticeSelector[j] = k;
  }
  for(i = 0; i < BSize + 2; i++)
  {
    uLatticeSelector[BSize + i] = uLatticeSelector[i];
    for(k = 0; k < 4; k++)
      for(j = 0; j < 2; j++)
        fGradient[k][BSize + i][j] = fGradient[k][i][j];
  }
}
#define s_curve(t) ( t * t * (3. - 2. * t) )
#define lerp(t, a, b) ( a + t * (b - a) )
double noise2(int nColorChannel, double vec[2], StitchInfo *pStitchInfo)
{
  int bx0, bx1, by0, by1, b00, b10, b01, b11;
  double rx0, rx1, ry0, ry1, *q, sx, sy, a, b, t, u, v;
  register i, j;
  t = vec[0] + PerlinN;
  bx0 = (int)t;
  bx1 = bx0+1;
  rx0 = t - (int)t;
  rx1 = rx0 - 1.0f;
  t = vec[1] + PerlinN;
  by0 = (int)t;
  by1 = by0+1;
  ry0 = t - (int)t;
  ry1 = ry0 - 1.0f;
  // ステッチする場合、それに応じて格子点を調整する。
  if(pStitchInfo != NULL)
  {
    if(bx0 >= pStitchInfo->nWrapX)
      bx0 -= pStitchInfo->nWidth;
    if(bx1 >= pStitchInfo->nWrapX)
      bx1 -= pStitchInfo->nWidth;
    if(by0 >= pStitchInfo->nWrapY)
      by0 -= pStitchInfo->nHeight;
    if(by1 >= pStitchInfo->nWrapY)
      by1 -= pStitchInfo->nHeight;
  }
  bx0 &= BM;
  bx1 &= BM;
  by0 &= BM;
  by1 &= BM;
  i = uLatticeSelector[bx0];
  j = uLatticeSelector[bx1];
  b00 = uLatticeSelector[i + by0];
  b10 = uLatticeSelector[j + by0];
  b01 = uLatticeSelector[i + by1];
  b11 = uLatticeSelector[j + by1];
  sx = double(s_curve(rx0));
  sy = double(s_curve(ry0));
  q = fGradient[nColorChannel][b00]; u = rx0 * q[0] + ry0 * q[1];
  q = fGradient[nColorChannel][b10]; v = rx1 * q[0] + ry0 * q[1];
  a = lerp(sx, u, v);
  q = fGradient[nColorChannel][b01]; u = rx0 * q[0] + ry1 * q[1];
  q = fGradient[nColorChannel][b11]; v = rx1 * q[0] + ry1 * q[1];
  b = lerp(sx, u, v);
  return lerp(sy, a, b);
}
double turbulence(int nColorChannel, double *point, double fBaseFreqX, double fBaseFreqY,
          int nNumOctaves, bool bFractalSum, bool bDoStitching,
          double fTileX, double fTileY, double fTileWidth, double fTileHeight)
{
  StitchInfo stitch;
  StitchInfo *pStitchInfo = NULL; // NULL の場合はステッチしない。
  // ステッチのために必要であれば基本周波数を調整する。
  if(bDoStitching)
  {
    // タイル状の turbulence をステッチする場合、周波数は
    // タイル境界が連続するように調整しなければならない。
    if(fBaseFreqX != 0.0)
    {
      double fLoFreq = double(floor(fTileWidth * fBaseFreqX)) / fTileWidth;
      double fHiFreq = double(ceil(fTileWidth * fBaseFreqX)) / fTileWidth;
      if(fBaseFreqX / fLoFreq < fHiFreq / fBaseFreqX)
        fBaseFreqX = fLoFreq;
      else
        fBaseFreqX = fHiFreq;
    }
    if(fBaseFreqY != 0.0)
    {
      double fLoFreq = double(floor(fTileHeight * fBaseFreqY)) / fTileHeight;
      double fHiFreq = double(ceil(fTileHeight * fBaseFreqY)) / fTileHeight;
      if(fBaseFreqY / fLoFreq < fHiFreq / fBaseFreqY)
        fBaseFreqY = fLoFreq;
      else
        fBaseFreqY = fHiFreq;
    }
    // 初期ステッチ値を設定する。
    pStitchInfo = &stitch;
    stitch.nWidth = int(fTileWidth * fBaseFreqX + 0.5f);
    stitch.nWrapX = fTileX * fBaseFreqX + PerlinN + stitch.nWidth;
    stitch.nHeight = int(fTileHeight * fBaseFreqY + 0.5f);
    stitch.nWrapY = fTileY * fBaseFreqY + PerlinN + stitch.nHeight;
  }
  double fSum = 0.0f;
  double vec[2];
  vec[0] = point[0] * fBaseFreqX;
  vec[1] = point[1] * fBaseFreqY;
  double ratio = 1;
  for(int nOctave = 0; nOctave < nNumOctaves; nOctave++)
  {
    if(bFractalSum)
      fSum += double(noise2(nColorChannel, vec, pStitchInfo) / ratio);
    else
      fSum += double(fabs(noise2(nColorChannel, vec, pStitchInfo)) / ratio);
    vec[0] *= 2;
    vec[1] *= 2;
    ratio *= 2;
    if(pStitchInfo != NULL)
    {
      // ステッチ値を更新する。乗算前に PerlinN を減算し、
      // その後加算すると、1 回減算する形に簡約される。
      stitch.nWidth *= 2;
      stitch.nWrapX = 2 * stitch.nWrapX - PerlinN;
      stitch.nHeight *= 2;
      stitch.nWrapY = 2 * stitch.nWrapY - PerlinN;
    }
  }
  return fSum;
}

属性の定義:

baseFrequency = "<number-optional-number>"

ノイズ関数の基本周波数パラメーター。2 つの <number> が指定された場合、最初の数値は X 方向の基本周波数を表し、2 番目の値は Y 方向の基本周波数を表す。1 つの数値が指定された場合、その値が X と Y の両方に使用される。

baseFrequency初期値0

負の値は サポートされない

アニメーション可能: はい。

numOctaves = "<integer>"

ノイズ関数の numOctaves パラメーター。

numOctaves初期値1

負の値は サポートされない

アニメーション可能: はい。

注: 最終画像の色値および アルファ値に対する各追加オクターブの寄与は、直前のオクターブの半分である。ある時点で、 追加オクターブの寄与は、指定された色深度における色 解像度より小さくなる。UA はサポートされる色深度に応じて、処理中に指定された numOctaves の値をクランプしてもよい。(たとえば、チャンネルあたり 8 ビットの色深度では、UA は numOctaves の値を 9 にクランプしてもよい。)

seed = "<number>"

擬似乱数生成器の開始値。

seed初期値0

seed の数値を上記アルゴリズムに渡す際には、まず切り捨て、すなわち 0 に近い側の 最も近い整数値に丸めなければならない。

アニメーション可能: はい。

stitchTiles = "stitch | noStitch"

stitchTiles="noStitch" の場合、turbulence 関数を含むタイルの 境界で滑らかな遷移を実現しようとはしない。結果としてタイル境界に明確な 不連続が現れる場合がある。

stitchTiles="stitch" の場合、ユーザーエージェントは baseFrequency-x および baseFrequency-y の値を自動的に調整し、feTurbulence ノードの幅と高さ(すなわち、現在の部分領域の幅 と高さ)が、最初のオクターブについて Perlin タイルの幅と高さを整数個含むようにする。 baseFrequency は、相対的な(絶対的ではない)変化が最小になる方向に応じて上下に調整される。 次のようにする: 周波数が与えられたとき、 lowFreq=floor(width*frequency)/width および hiFreq=ceil(width*frequency)/width を計算する。frequency/lowFreq < hiFreq/frequency の場合は lowFreq を使用し、それ以外は hiFreq を使用する。turbulence 値を生成する際は、Perlin Noise と同様に通常どおり格子ベクトルを生成するが、 アクティブ領域(生成されるタイルのサイズ)の右端または下端にある格子点については例外とする。 その場合、アクティブ領域の反対側の端から格子ベクトルをコピーする。

stitchTiles初期値noStitch

アニメーション可能: はい。

type = "fractalNoise | turbulence"

フィルタープリミティブがノイズ関数または turbulence 関数のどちらを実行するかを示す。

type初期値turbulence

アニメーション可能: はい。

<svg width="450px" height="325px" viewBox="0 0 450 325"
     xmlns="http://www.w3.org/2000/svg">
  <title>feTurbulence の例 - feTurbulence 操作の例</title>
  <desc>feTurbulence のさまざまなパラメーター設定の効果を示す
        6 つの矩形領域。</desc>
  <g  font-family="Verdana" text-anchor="middle" font-size="10" >
    <defs>
      <filter id="Turb1" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="turbulence" baseFrequency="0.05" numOctaves="2"/>
      </filter>
      <filter id="Turb2" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="turbulence" baseFrequency="0.1" numOctaves="2"/>
      </filter>
      <filter id="Turb3" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="turbulence" baseFrequency="0.05" numOctaves="8"/>
      </filter>
      <filter id="Turb4" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="fractalNoise" baseFrequency="0.1" numOctaves="4"/>
      </filter>
      <filter id="Turb5" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="fractalNoise" baseFrequency="0.4" numOctaves="4"/>
      </filter>
      <filter id="Turb6" filterUnits="objectBoundingBox"
              x="0%" y="0%" width="100%" height="100%">
        <feTurbulence type="fractalNoise" baseFrequency="0.1" numOctaves="1"/>
      </filter>
    </defs>

    <rect x="1" y="1" width="448" height="323"
          fill="none" stroke="blue" stroke-width="1"  />

    <rect x="25" y="25" width="100" height="75" filter="url(#Turb1)"  />
    <text x="75" y="117">type=turbulence</text>
    <text x="75" y="129">baseFrequency=0.05</text>
    <text x="75" y="141">numOctaves=2</text>

    <rect x="175" y="25" width="100" height="75" filter="url(#Turb2)"  />
    <text x="225" y="117">type=turbulence</text>
    <text x="225" y="129">baseFrequency=0.1</text>
    <text x="225" y="141">numOctaves=2</text>

    <rect x="325" y="25" width="100" height="75" filter="url(#Turb3)"  />
    <text x="375" y="117">type=turbulence</text>
    <text x="375" y="129">baseFrequency=0.05</text>
    <text x="375" y="141">numOctaves=8</text>

    <rect x="25" y="180" width="100" height="75" filter="url(#Turb4)"  />
    <text x="75" y="272">type=fractalNoise</text>
    <text x="75" y="284">baseFrequency=0.1</text>
    <text x="75" y="296">numOctaves=4</text>

    <rect x="175" y="180" width="100" height="75" filter="url(#Turb5)"  />
    <text x="225" y="272">type=fractalNoise</text>
    <text x="225" y="284">baseFrequency=0.4</text>
    <text x="225" y="296">numOctaves=4</text>

    <rect x="325" y="180" width="100" height="75" filter="url(#Turb6)"  />
    <text x="375" y="272">type=fractalNoise</text>
    <text x="375" y="284">baseFrequency=0.1</text>
    <text x="375" y="296">numOctaves=1</text>
  </g>
</svg>
feTurbulence の例

feTurbulence の例

この例を SVG として表示

10. color-interpolation-filters プロパティ

color-interpolation-filters プロパティの説明は次のとおりである:

名前: color-interpolation-filters
値: auto | sRGB | linearRGB
初期値: linearRGB
適用対象: すべての フィルター プリミティブ
継承: する
パーセンテージ: 該当なし
算出値: 指定どおり
正規順序: 文法に従う
メディア: 視覚
アニメーション可能: いいえ
auto

ユーザーエージェントがフィルター効果の色操作に sRGB または linearRGB のいずれかの色空間を選択できることを示す。 このオプションは、作者が色操作を特定の色空間で行うことを要求していないことを示す。

sRGB

フィルター効果の色操作を sRGB 色空間で行うべきであることを示す。

linearRGB

フィルター効果の色操作を線形化された RGB 色空間で行うべきであることを示す。

color-interpolation-filters プロパティは、 フィルター効果によって実行される画像処理操作の色空間を指定する。

注: color-interpolation-filters プロパティは フィルター操作にのみ影響する。したがって、feOffsetfeImagefeTile、または feFlood のようなフィルタープリミティブには影響しない。

注: color-interpolation-filters は、color-interpolation とは異なる初期値を持つ。color-interpolation-filters の初期値は linearRGB であるのに対し、color-interpolation の初期値は sRGB である。したがって既定の場合、フィルター 効果の操作は linearRGB 色空間で行われる一方、その他すべての色補間は既定で sRGB 色空間で行われる。

注: color-interpolation-filters プロパティは、sRGB 色空間で動作する フィルター関数には影響しない。

color-interpolation-filters プロパティは、SVG 要素の プレゼンテーション 属性である。

11. 光源要素およびプロパティ

11.1. はじめに

以下の節では、光源を定義する要素、feDistantLightfePointLightfeSpotLight、および光の色を定義するプロパティ lighting-color を定義する。

11.2. 光源 feDistantLight

名前: feDistantLight
カテゴリー: 光源
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEDistantLightElement

属性の定義:

azimuth = "<number>"

XY 平面上での光源の方向角(時計回り)を、x 軸からの度数で表す。

azimuth初期値0

アニメーション可能: はい。

elevation = "<number>"

XY 平面から Z 軸へ向かう光源の方向角を度数で表す。正の Z 軸は観察者の方向を向くことに注意。

elevation初期値0

アニメーション可能: はい。

次の図は、azimuth および elevation が XYZ 座標系で表す角度を示す。

azimuth および elevation が表す角度

azimuth および elevation が表す角度

11.3. 光源 fePointLight

名前: fePointLight
カテゴリー: 光源
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFEPointLightElement

属性の定義:

x = "<number>"

filter 要素上の属性 primitiveUnits によって確立される座標系における光源の X 位置。

x初期値0

アニメーション可能: はい。

y = "<number>"

filter 要素上の属性 primitiveUnits によって確立される座標系における光源の Y 位置。

y初期値0

アニメーション可能: はい。

z = "<number>"

filter 要素上の属性 primitiveUnits によって確立される座標系における光源の Z 位置。初期 ローカル座標系において、正の Z 軸が コンテンツを閲覧する人の方向へ向かい、Z 軸に沿った 1 単位が X および Y の 1 単位に等しいと仮定する。

z初期値0

アニメーション可能: はい。

11.4. 光源 feSpotLight

名前: feSpotLight
カテゴリー: 光源
コンテンツモデル: 任意の数の 記述的要素animatescriptset 要素を任意の順序で。
属性:
DOM インターフェイス: SVGFESpotLightElement

属性の定義:

x = "<number>"

filter 要素上の属性 primitiveUnits によって確立される座標系における光源の X 位置。

x初期値0

アニメーション可能: はい。

y = "<number>"

filter 要素上の属性 primitiveUnits によって確立される座標系における光源の Y 位置。

y初期値0

アニメーション可能: はい。

z = "<number>"

filter 要素上の属性 primitiveUnits によって確立される座標系における光源の Z 位置。初期 ローカル座標系において、正の Z 軸が コンテンツを閲覧する人の方向へ向かい、Z 軸に沿った 1 単位が X および Y の 1 単位に等しいと仮定する。

z初期値0

アニメーション可能: はい。

pointsAtX = "<number>"

光源が向いている点の、filter 要素上の属性 primitiveUnits によって確立される座標系における X 位置。

pointsAtX初期値0

アニメーション可能: はい。

pointsAtY = "<number>"

光源が向いている点の、filter 要素上の属性 primitiveUnits によって確立される座標系における Y 位置。

pointsAtY初期値0

アニメーション可能: はい。

pointsAtZ = "<number>"

光源が向いている点の、filter 要素上の属性 primitiveUnits によって確立される座標系における Z 位置。初期 ローカル座標系において、正の Z 軸が コンテンツを閲覧する人の方向へ向かい、Z 軸に沿った 1 単位が X および Y の 1 単位に等しいと仮定する。

pointsAtZ初期値0

アニメーション可能: はい。

specularExponent = "<number>"

光源の集光度を制御する指数値。

specularExponent初期値1

specularExponent の使用方法については、 フィルタープリミティブ <feDiffuseLighting> の節を参照。

注: specularExponent は、feSpotLight において、specularExponentfeSpecularLighting で果たすものとは異なるユースケースに用いられる。

アニメーション可能: はい。

limitingConeAngle = "<number>"

光が投射される領域を制限する円錐。円錐の外側には光は投射されない。limitingConeAngle は、 スポットライト軸(すなわち、光源と光源が向いている点との間の軸)と スポットライトの円錐との間の角度を度数で表す。ユーザーエージェントは、円錐の境界で アンチエイリアシングなどの平滑化手法を適用すべきである。

値が指定されていない場合、制限円錐は適用されない。

アニメーション可能: はい。

11.5. lighting-color プロパティ

名前: lighting-color
値: <color>
初期値: white
適用対象: feDiffuseLighting および feSpecularLighting 要素
継承: しない
パーセンテージ: 該当なし
算出値: 指定どおり
正規順序: 文法に従う
メディア: 視覚
アニメーション可能: 算出値によって

lighting-color プロパティは、フィルタープリミティブ フィルタープリミティブ feDiffuseLighting および feSpecularLighting の光源の色を定義する。

lighting-color プロパティは、SVG 要素の プレゼンテーション 属性である。

12. フィルター CSS <image>

CSS <image> 値は、CSS filter プロパティに指定されたフィルター関数でフィルター処理できる。この仕様では、次の構文を持つ <image> <filter()> 関数を導入する:

filter() = filter( [ <image> | <string> ], <filter-value-list> )

<filter()> 関数は 2 つの引数を取る。最初の引数は <image> である。2 番目は CSS filter プロパティに指定されたフィルター関数リストである。この関数は <image> パラメーターを受け取り、フィルタールールを適用して、処理済み画像を返す。 フィルター領域およびフィルター効果領域は、入力 <image>具体的オブジェクトサイズに従ってサイズが決定される。

注: 元の画像の寸法と原点を保持しなければならないため、 完全に不透明な画像に対する <drop-shadow()> のような一部のフィルター効果は 何の効果も持たない場合がある。

<blur()> 関数では、feGaussianBlur 要素上の edgeMode 属性は duplicate に設定される。これにより、フィルター処理された入力 画像の端で、より好ましい結果が得られる。

12.1. filter() の補間

開始画像と終了画像の両方が <filter()> であり、使用するフィルター関数のみが異なる場合、 フィルターの補間の節で説明されるように、それらのフィルター関数リストを補間することによって補間しなければならない。 それ以外の場合は、一般的な <image> として補間しなければならない。 フィルター関数の補間を実行できない場合、画像は一般的な <image> として補間しなければならない。

13. filter 要素に基づいて定義される略記

13.1. フィルタープリミティブによる表現

以下は、'filter element' 要素の観点から表現した各フィルター関数の等価表現である。 関数のパラメーターは、次の形式で角括弧を使って示す: [amount]。パーセンテージ値である パラメーターの場合は、実数に変換される。

13.1.1. grayscale

<filter id="grayscale">
  <feColorMatrix type="matrix"
             values="
    (0.2126 + 0.7874 * [1 - amount]) (0.7152 - 0.7152  * [1 - amount]) (0.0722 - 0.0722 * [1 - amount]) 0 0
    (0.2126 - 0.2126 * [1 - amount]) (0.7152 + 0.2848  * [1 - amount]) (0.0722 - 0.0722 * [1 - amount]) 0 0
    (0.2126 - 0.2126 * [1 - amount]) (0.7152 - 0.7152  * [1 - amount]) (0.0722 + 0.9278 * [1 - amount]) 0 0
    0 0 0 1 0"/>
</filter>

13.1.2. sepia

<filter id="sepia">
  <feColorMatrix type="matrix"
             values="
    (0.393 + 0.607 * [1 - amount]) (0.769 - 0.769 * [1 - amount]) (0.189 - 0.189 * [1 - amount]) 0 0
    (0.349 - 0.349 * [1 - amount]) (0.686 + 0.314 * [1 - amount]) (0.168 - 0.168 * [1 - amount]) 0 0
    (0.272 - 0.272 * [1 - amount]) (0.534 - 0.534 * [1 - amount]) (0.131 + 0.869 * [1 - amount]) 0 0
    0 0 0 1 0"/>
</filter>

13.1.3. saturate

<filter id="saturate">
  <feColorMatrix type="saturate" values="[amount]"/>
</filter>

13.1.4. hue-rotate

<filter id="hue-rotate">
  <feColorMatrix type="hueRotate" values="[angle]"/>
</filter>

13.1.5. invert

<filter id="invert">
  <feComponentTransfer>
      <feFuncR type="table" tableValues="[amount] (1 - [amount])"/>
      <feFuncG type="table" tableValues="[amount] (1 - [amount])"/>
      <feFuncB type="table" tableValues="[amount] (1 - [amount])"/>
  </feComponentTransfer>
</filter>

13.1.6. opacity

<filter id="opacity">
  <feComponentTransfer>
      <feFuncA type="table" tableValues="0 [amount]"/>
  </feComponentTransfer>
</filter>

13.1.7. brightness

<filter id="brightness">
  <feComponentTransfer>
      <feFuncR type="linear" slope="[amount]"/>
      <feFuncG type="linear" slope="[amount]"/>
      <feFuncB type="linear" slope="[amount]"/>
  </feComponentTransfer>
</filter>

13.1.8. contrast

<filter id="contrast">
  <feComponentTransfer>
      <feFuncR type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
      <feFuncG type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
      <feFuncB type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
  </feComponentTransfer>
</filter>

13.1.9. blur

<filter id="blur">
  <feGaussianBlur stdDeviation="[radius radius]" edgeMode="[edge mode]" >
</filter>

ここで edge mode は、filter プロパティでは none に、 CSS Image <filter()> 関数では duplicate に算出される。

注: <blur()> 関数は UA が定義するフィルター領域を拡大する場合がある。 略記のフィルター領域を参照。

13.1.10. drop-shadow

<filter id="drop-shadow">
  <feGaussianBlur in="[alpha-channel-of-input]" stdDeviation="[radius]"/>
  <feOffset dx="[offset-x]" dy="[offset-y]" result="offsetblur"/>
  <feFlood flood-color="[color]"/>
  <feComposite in2="offsetblur" operator="in"/>
  <feMerge>
    <feMergeNode/>
    <feMergeNode in="[input-image]"/>
  </feMerge>
</filter>

注: <drop-shadow()> 関数は UA が定義するフィルター領域を拡大する場合がある。略記のフィルター 領域を参照。

13.2. 略記のフィルター領域

前の小節でフィルタープリミティブを使用して実装されるすべての略記フィルターは、UA が定義する フィルター領域を持たなければならない。フィルター 領域は、はみ出したコンテンツ、スクロールバーなどのグラフィカルな制御要素、 border/border-imagebox-shadowtext-shadowoutline を含む要素の視覚的コンテンツを覆わなければならない。 さらに、<blur()><drop-shadow()> の場合のように、略記フィルターが この可視領域を拡大する場合、フィルター領域はその領域も覆わなければならない。

注: フィルターソースの処理については、 フィルター領域の節を参照。

14. フィルターのアニメーション

14.1. フィルター関数リストの補間

あるフィルターと別のフィルターとの間を補間するには、次の一覧で最初に一致する条件に対応する 手順を実行しなければならない:

両方のフィルターが、 <filter-value-list> を同じ長さで持ち、<url> を含まず、各一覧内で対応する項目が存在するそれぞれの <filter-function> について
<filter-function> の組を、 フィルター関数の補間の節の規則に従って補間する。
両方の フィルターが、長さの異なる <filter-value-list> を持ち、<url> を含まず、各一覧内で対応する項目が存在するそれぞれの <filter-function> について
  1. 長い方の一覧から、対応する不足している <filter-function> を短い方の一覧の 末尾に追加する。新たに追加された <filter-function> は、補間のために それぞれの初期値で初期化しなければならない。
  2. <filter-function> の組を、 フィルター関数の補間の節の規則に従って補間する。
一方のフィルターが none であり、 もう一方が <filter-value-list> で、<url> を含まない場合
  1. none を、もう一方のフィルターに対応する <filter-value-list> に置き換える。新しい <filter-function> は、補間のために それぞれの初期値で初期化しなければならない。
  2. <filter-function> の組を、 フィルター関数の補間の節の規則に従って補間する。
それ以外の場合
離散補間を使用する。

フィルター 関数の距離を計算する。 <https://github.com/w3c/csswg-drafts/issues/91>

14.2. 加算

<filter-value-list> の独立したアニメーションを組み合わせることができる [SVG11]

基底値(base filter list)を表すフィルター値と、加算する値 (added filter list)を表すフィルター値の 2 つが与えられた場合、2 つの一覧を連結した ‘base filter list added filter list’ を返す。

次の SVG アニメーションには、animate 要素が 2 つあり、filter プロパティを rect 要素上でアニメーションする。指定された両方のアニメーションは加算的で、 継続時間は 10s である。
<rect width="200px" filter="none" ...>
  <animate attributeName="filter" from="blur(0px)" to="blur(10px)" dur="10s"
           additive="sum"/>
  <animate attributeName="filter" from="sepia(0)" to="sepia(1)" dur="10s"
           additive="sum"/>
</rect>

5s 後、使用値としての filterblur(5px) sepia(0.5) となる。

14.3. 累積

2 つのフィルター値 Va および Vb が与えられた場合、フィルター値 Vb を返す。

15. プライバシーおよびセキュリティに関する考慮事項

15.1. 汚染されたフィルタープリミティブ

いかなるフィルター操作の実行時間も、フィルター処理されたコンテンツや、 プライバシーに関わる情報を含む可能性のあるその他のソースから得られたピクセル値に依存しないことが重要である。

次の フィルター プリミティブは、フィルター対象オブジェクト自体、または CSS スタイル設定などのその他のソースから、 プライバシーに関わる可能性のあるピクセル値にアクセスできる場合がある。これらのプリミティブは "tainted" としてフラグ付けしなければならない。

  1. feFlood で、flood-color プロパティの 指定値currentColor に算出される場合、

  2. feDropShadow で、flood-color プロパティの 指定値currentColor に算出される場合、

  3. feDiffuseLighting で、lighting-color プロパティの 指定値currentColor に算出される場合

  4. feSpecularLighting で、lighting-color プロパティの 指定値currentColor に算出される場合、

  5. feImage で、<url> 参照が要素を指すか、 フェッチモード No-CORS でリソースを取得する場合、および

  6. フィルタープリミティブ: SourceGraphicSourceAlphaBackgroundImageBackgroundAlphaFillPaint、および StrokePaint

feFloodfeDropShadowfeDiffuseLighting および feSpecularLighting は、プロパティ値として <color> を取る 1 つ以上の CSS プロパティを持つプリミティブである。<color> は、とりわけ currentColor キーワードを含む。currentColor使用値は、color プロパティから導出される。color:visited 疑似セレクターによって設定できるため、プライバシーに関わる情報を含む可能性があり、 したがってこれらのプリミティブは汚染されたものとしてマークしなければならない。

feImage は、 クロスドメイン画像だけでなく SVG グラフィックス 要素などの文書フラグメントも参照できる。これらの参照はプライバシーに関わる情報を含む可能性があるため、 このプリミティブは汚染されたものとしてマークしなければならない。

フィルタープリミティブ SourceGraphicSourceAlphaBackgroundImageBackgroundAlphaFillPaint、および StrokePaint は、SVG グラフィックス要素などの文書フラグメント、または color プロパティから直接または 間接的に導出される可能性のあるスタイル情報のいずれかを参照する。したがって、 これらのプリミティブは汚染されたものとしてマークしなければならない。

入力として "tainted" とフラグ付けされた フィルター プリミティブを持つすべての フィルタープリミティブ も、"tainted" としてフラグ付けしなければならない。

入力フィルタープリミティブの 1 つが "tainted" としてフラグ付けされている場合、 フィルター操作はピクセル値に関係なく常に同じ時間がかかるように実装しなければならない。

注: この仕様は、ユーザーエージェントからの実装フィードバックに基づいて、 フィルタープリミティブに対する制限を強化している。

15.2. feDisplacementMap の制限

feDisplacementMap が "tainted" とフラグ付けされたフィルター プリミティブを入力として持ち、この入力フィルタープリミティブが変位マップとして使用される(in2 によって参照される)場合、feDisplacementMap はフィルター 操作を続行してはならず、パススルーフィルターとして動作する。

15.3. オリジンの制限

ユーザーエージェントは、filter プロパティについて、[HTML5] 仕様で定義される CORS 対応の可能性がある フェッチ方式を使用しなければならない。フェッチ時、ユーザーエージェントは "Anonymous" モードを使用し、 リファラーソースをスタイルシートの URL に設定し、オリジンを包含文書の URL に設定しなければならない。 これによってネットワークエラーが発生した場合、その効果は値 none が指定された場合と同じである。

15.4. タイミング攻撃

上記の規則のいずれかが守られない場合、攻撃者は情報を推測し、タイミング攻撃を実行できる可能性がある。

タイミング攻撃とは、操作に要する時間を調べることによって、 本来保護されているコンテンツに関する情報を取得する方法である。たとえば赤いピクセルの描画に 緑のピクセルより長い時間がかかる場合、要素のコンテンツに一度もアクセスすることなく、 レンダリングされる要素のおおよその画像を再構築できる可能性がある。セキュリティ研究では、算術演算の時間差は ハードウェアアーキテクチャまたはコンパイラーによって生じる場合があることが示されている [ArTD]

付録 A: 非推奨の enable-background プロパティ

SVG 1.1 は enable-background プロパティを導入した [SVG11]。このプロパティは、filter 要素が 呼び出された時点で、フィルター領域の背後にある背景を定義していた。 このプロパティによって定義される概念は、この仕様の執筆時点における CSS の スタッキングコンテキストモデルと互換性がないことが判明した。UA は SVG 1.1 で定義されたとおりに enable-background プロパティを実装することを選択できるが、 この仕様または CSS Compositing and Blending [COMPOSITING-1] とは互換性がない。

この仕様は enable-background プロパティをサポートしない。UA は代わりに isolation プロパティをサポートしなければならない [COMPOSITING-1]

付録 B: DOM インターフェイス

インターフェイス SVGFilterElement

SVGFilterElement インターフェイスは filter 要素に対応する。

interface SVGFilterElement : SVGElement {
  readonly attribute SVGAnimatedEnumeration filterUnits;
  readonly attribute SVGAnimatedEnumeration primitiveUnits;
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
};

SVGFilterElement includes SVGURIReference;
属性:
filterUnits, 型は SVGAnimatedEnumeration、 読み取り専用

指定された filter 要素上の属性 filterUnits に対応する。SVGUnitTypes で定義される定数のいずれかを取る。

primitiveUnits, 型は SVGAnimatedEnumeration、 読み取り専用

指定された filter 要素上の属性 primitiveUnits に対応する。SVGUnitTypes で定義される定数のいずれかを取る。

x, 型は SVGAnimatedLength、読み取り専用

指定された filter 要素上の属性 x に対応する。

y, 型は SVGAnimatedLength、読み取り専用

指定された filter 要素上の属性 y に対応する。

width, 型は SVGAnimatedLength、読み取り専用

指定された filter 要素上の属性 width に対応する。

height, 型は SVGAnimatedLength、読み取り専用

指定された filter 要素上の属性 height に対応する。

インターフェイス SVGFilterPrimitiveStandardAttributes

interface mixin SVGFilterPrimitiveStandardAttributes {
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
  readonly attribute SVGAnimatedString result;
};
属性:
x, 型は SVGAnimatedLength、読み取り専用

指定された要素上の属性 x に対応する。

y, 型は SVGAnimatedLength、読み取り専用

指定された要素上の属性 y に対応する。

width, 型は SVGAnimatedLength、読み取り専用

指定された 要素上の属性 width に対応する。

height, 型は SVGAnimatedLength、読み取り専用

指定された 要素上の属性 height に対応する。

result, 型は SVGAnimatedString、読み取り専用

指定された 要素上の属性 result に対応する。

インターフェイス SVGFEBlendElement

SVGFEBlendElement インターフェイスは feBlend 要素に対応する。

interface SVGFEBlendElement : SVGElement {

  // ブレンドモードの型
  const unsigned short SVG_FEBLEND_MODE_UNKNOWN = 0;
  const unsigned short SVG_FEBLEND_MODE_NORMAL = 1;
  const unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
  const unsigned short SVG_FEBLEND_MODE_SCREEN = 3;
  const unsigned short SVG_FEBLEND_MODE_DARKEN = 4;
  const unsigned short SVG_FEBLEND_MODE_LIGHTEN = 5;
  const unsigned short SVG_FEBLEND_MODE_OVERLAY = 6;
  const unsigned short SVG_FEBLEND_MODE_COLOR_DODGE = 7;
  const unsigned short SVG_FEBLEND_MODE_COLOR_BURN = 8;
  const unsigned short SVG_FEBLEND_MODE_HARD_LIGHT = 9;
  const unsigned short SVG_FEBLEND_MODE_SOFT_LIGHT = 10;
  const unsigned short SVG_FEBLEND_MODE_DIFFERENCE = 11;
  const unsigned short SVG_FEBLEND_MODE_EXCLUSION = 12;
  const unsigned short SVG_FEBLEND_MODE_HUE = 13;
  const unsigned short SVG_FEBLEND_MODE_SATURATION = 14;
  const unsigned short SVG_FEBLEND_MODE_COLOR = 15;
  const unsigned short SVG_FEBLEND_MODE_LUMINOSITY = 16;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration mode;
};

SVGFEBlendElement includes SVGFilterPrimitiveStandardAttributes;
グループ「ブレンドモードの型」の定数:
SVG_FEBLEND_MODE_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_FEBLEND_MODE_NORMAL

normal に対応する。

SVG_FEBLEND_MODE_MULTIPLY

multiply に対応する。

SVG_FEBLEND_MODE_SCREEN

screen に対応する。

SVG_FEBLEND_MODE_DARKEN

darken に対応する。

SVG_FEBLEND_MODE_LIGHTEN

lighten に対応する。

SVG_FEBLEND_MODE_OVERLAY

overlay に対応する。

SVG_FEBLEND_MODE_COLOR_DODGE

color-dodge に対応する。

SVG_FEBLEND_MODE_COLOR_BURN

color-burn に対応する。

SVG_FEBLEND_MODE_HARD_LIGHT

hard-light に対応する。

SVG_FEBLEND_MODE_SOFT_LIGHT

soft-light に対応する。

SVG_FEBLEND_MODE_DIFFERENCE

difference に対応する。

SVG_FEBLEND_MODE_EXCLUSION

exclusion に対応する。

SVG_FEBLEND_MODE_HUE

hue に対応する。

SVG_FEBLEND_MODE_SATURATION

saturation に対応する。

SVG_FEBLEND_MODE_COLOR

color に対応する。

SVG_FEBLEND_MODE_LUMINOSITY

luminosity に対応する。

属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feBlend 要素上の属性 in に対応する。

in2, 型は SVGAnimatedString、読み取り専用

指定された feBlend 要素上の属性 in2 に対応する。

mode, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feBlend 要素上の属性 mode に対応する。このインターフェイスで定義される SVG_FEBLEND_MODE_* 定数のいずれかを取る。

インターフェイス SVGFEColorMatrixElement

SVGFEColorMatrixElement インターフェイスは feColorMatrix 要素に対応する。

interface SVGFEColorMatrixElement : SVGElement {

  // カラーマトリックスの型
  const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
  const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
  const unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
  const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList values;
};

SVGFEColorMatrixElement includes SVGFilterPrimitiveStandardAttributes;
グループ「カラーマトリックスの型」の定数:
SVG_FECOLORMATRIX_TYPE_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_FECOLORMATRIX_TYPE_MATRIX

matrix に対応する。

SVG_FECOLORMATRIX_TYPE_SATURATE

saturate に対応する。

SVG_FECOLORMATRIX_TYPE_HUEROTATE

hueRotate に対応する。

SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA

luminanceToAlpha に対応する。

属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feColorMatrix 要素上の属性 in に対応する。

type, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feColorMatrix 要素上の属性 type に対応する。このインターフェイスで定義される SVG_FECOLORMATRIX_TYPE_* 定数のいずれかを取る。

values, 型は SVGAnimatedNumberList、 読み取り専用

指定された feColorMatrix 要素上の属性 values に対応する。

インターフェイス SVGFEComponentTransferElement

SVGFEComponentTransferElement インターフェイスは feComponentTransfer 要素に対応する。

interface SVGFEComponentTransferElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFEComponentTransferElement includes SVGFilterPrimitiveStandardAttributes;
属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feComponentTransfer 要素上の属性 in に対応する。

インターフェイス SVGComponentTransferFunctionElement

このインターフェイスは、成分転送関数インターフェイスで使用される基本インターフェイスを定義する。

interface SVGComponentTransferFunctionElement : SVGElement {

  // 成分転送の型
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5;

  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList tableValues;
  readonly attribute SVGAnimatedNumber slope;
  readonly attribute SVGAnimatedNumber intercept;
  readonly attribute SVGAnimatedNumber amplitude;
  readonly attribute SVGAnimatedNumber exponent;
  readonly attribute SVGAnimatedNumber offset;
};
グループ「成分転送の型」の定数:
SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY

identity に対応する。

SVG_FECOMPONENTTRANSFER_TYPE_TABLE

table に対応する。

SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE

discrete に対応する。

SVG_FECOMPONENTTRANSFER_TYPE_LINEAR

linear に対応する。

SVG_FECOMPONENTTRANSFER_TYPE_GAMMA

gamma に対応する。

属性:
type, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feComponentTransfer 要素上の属性 in に対応する。このインターフェイスで定義される SVG_FECOMPONENTTRANSFER_TYPE_* 定数のいずれかを取る。

tableValues, 型は SVGAnimatedNumberList、 読み取り専用

指定された feComponentTransfer 要素上の属性 tableValues に対応する。このインターフェイスで定義される SVG_FECOLORMATRIX_TYPE_* 定数のいずれかを取る。

slope, 型は SVGAnimatedNumber、読み取り専用

指定された feComponentTransfer 要素上の属性 slope に対応する。

intercept, 型は SVGAnimatedNumber、読み取り専用

指定された feComponentTransfer 要素上の属性 intercept に対応する。

amplitude, 型は SVGAnimatedNumber、読み取り専用

指定された feComponentTransfer 要素上の属性 amplitude に対応する。

exponent, 型は SVGAnimatedNumber、読み取り専用

指定された feComponentTransfer 要素上の属性 exponent に対応する。

offset, 型は SVGAnimatedNumber、読み取り専用

指定された feComponentTransfer 要素上の属性 offset に対応する。

インターフェイス SVGFEFuncRElement

SVGFEFuncRElement インターフェイスは feFuncR 要素に対応する。

interface SVGFEFuncRElement : SVGComponentTransferFunctionElement {
};

インターフェイス SVGFEFuncGElement

SVGFEFuncGElement インターフェイスは feFuncG 要素に対応する。

interface SVGFEFuncGElement : SVGComponentTransferFunctionElement {
};

インターフェイス SVGFEFuncBElement

SVGFEFuncBElement インターフェイスは feFuncB 要素に対応する。

interface SVGFEFuncBElement : SVGComponentTransferFunctionElement {
};

インターフェイス SVGFEFuncAElement

SVGFEFuncAElement インターフェイスは feFuncA 要素に対応する。

interface SVGFEFuncAElement : SVGComponentTransferFunctionElement {
};

インターフェイス SVGFECompositeElement

SVGFECompositeElement インターフェイスは feComposite 要素に対応する。

interface SVGFECompositeElement : SVGElement {

  // 合成演算子
  const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OVER = 1;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_IN = 2;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OUT = 3;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_XOR = 5;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber k1;
  readonly attribute SVGAnimatedNumber k2;
  readonly attribute SVGAnimatedNumber k3;
  readonly attribute SVGAnimatedNumber k4;
};

SVGFECompositeElement includes SVGFilterPrimitiveStandardAttributes;
グループ「合成演算子」の定数:
SVG_FECOMPOSITE_OPERATOR_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_FECOMPOSITE_OPERATOR_OVER

over に対応する。

SVG_FECOMPOSITE_OPERATOR_IN

in に対応する。

SVG_FECOMPOSITE_OPERATOR_OUT

out に対応する。

SVG_FECOMPOSITE_OPERATOR_ATOP

atop に対応する。

SVG_FECOMPOSITE_OPERATOR_XOR

xor に対応する。

SVG_FECOMPOSITE_OPERATOR_ARITHMETIC

arithmetic に対応する。

属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feComposite 要素上の属性 in に対応する。

in2, 型は SVGAnimatedString、読み取り専用

指定された feComposite 要素上の属性 in2 に対応する。

operator, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feComposite 要素上の属性 operator に対応する。

k1, 型は SVGAnimatedNumber、読み取り専用

指定された feComposite 要素上の属性 k1 に対応する。

k2, 型は SVGAnimatedNumber、読み取り専用

指定された feComposite 要素上の属性 k2 に対応する。

k3, 型は SVGAnimatedNumber、読み取り専用

指定された feComposite 要素上の属性 k3 に対応する。

k4, 型は SVGAnimatedNumber、読み取り専用

指定された feComposite 要素上の属性 k4 に対応する。

インターフェイス SVGFEConvolveMatrixElement

SVGFEConvolveMatrixElement インターフェイスは feConvolveMatrix 要素に対応する。

interface SVGFEConvolveMatrixElement : SVGElement {

  // エッジモード値
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedInteger orderX;
  readonly attribute SVGAnimatedInteger orderY;
  readonly attribute SVGAnimatedNumberList kernelMatrix;
  readonly attribute SVGAnimatedNumber divisor;
  readonly attribute SVGAnimatedNumber bias;
  readonly attribute SVGAnimatedInteger targetX;
  readonly attribute SVGAnimatedInteger targetY;
  readonly attribute SVGAnimatedEnumeration edgeMode;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
  readonly attribute SVGAnimatedBoolean preserveAlpha;
};

SVGFEConvolveMatrixElement includes SVGFilterPrimitiveStandardAttributes;
グループ「エッジモード値」の定数:
SVG_EDGEMODE_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_EDGEMODE_DUPLICATE

duplicate に対応する。

SVG_EDGEMODE_WRAP

wrap に対応する。

SVG_EDGEMODE_NONE

none に対応する。

属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feConvolveMatrix 要素上の属性 in に対応する。

orderX, 型は SVGAnimatedInteger、読み取り専用

指定された feConvolveMatrix 要素上の属性 order に対応する。

orderY, 型は SVGAnimatedInteger、読み取り専用

指定された feConvolveMatrix 要素上の属性 order に対応する。

kernelMatrix, 型は SVGAnimatedNumberList、 読み取り専用

指定された feConvolveMatrix 要素上の属性 kernelMatrix に対応する。

divisor, 型は SVGAnimatedNumber、読み取り専用

指定された feConvolveMatrix 要素上の属性 divisor に対応する。

bias, 型は SVGAnimatedNumber、読み取り専用

指定された feConvolveMatrix 要素上の属性 bias に対応する。

targetX, 型は SVGAnimatedInteger、読み取り専用

指定された feConvolveMatrix 要素上の属性 targetX に対応する。

targetY, 型は SVGAnimatedInteger、読み取り専用

指定された feConvolveMatrix 要素上の属性 targetY に対応する。

edgeMode, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feConvolveMatrix 要素上の属性 edgeMode に対応する。

kernelUnitLengthX, 型は SVGAnimatedNumber、読み取り専用

指定された feConvolveMatrix 要素上の属性 kernelUnitLength に対応する。

kernelUnitLengthY, 型は SVGAnimatedNumber、読み取り専用

指定された feConvolveMatrix 要素上の属性 kernelUnitLength に対応する。

preserveAlpha, 型は SVGAnimatedBoolean、読み取り専用

指定された feConvolveMatrix 要素上の属性 preserveAlpha に 対応する。

インターフェイス SVGFEDiffuseLightingElement

SVGFEDiffuseLightingElement インターフェイスは feDiffuseLighting 要素に対応する。

interface SVGFEDiffuseLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber diffuseConstant;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFEDiffuseLightingElement includes SVGFilterPrimitiveStandardAttributes;
属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feDiffuseLighting 要素上の属性 in に対応する。

surfaceScale, 型は SVGAnimatedNumber、読み取り専用

指定された feDiffuseLighting 要素上の属性 surfaceScale に対応する。

diffuseConstant, 型は SVGAnimatedNumber、読み取り専用

指定された feDiffuseLighting 要素上の属性 diffuseConstant に対応する。

kernelUnitLengthX, 型は SVGAnimatedNumber、読み取り専用

指定された feDiffuseLighting 要素上の属性 kernelUnitLength に対応する。

kernelUnitLengthY, 型は SVGAnimatedNumber、読み取り専用

指定された feDiffuseLighting 要素上の属性 kernelUnitLength に対応する。

インターフェイス SVGFEDistantLightElement

SVGFEDistantLightElement インターフェイスは feDistantLight 要素に対応する。

interface SVGFEDistantLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber azimuth;
  readonly attribute SVGAnimatedNumber elevation;
};
属性:
azimuth, 型は SVGAnimatedNumber、読み取り専用

指定された feDistantLight 要素上の属性 azimuth に対応する。

elevation, 型は SVGAnimatedNumber、読み取り専用

指定された feDistantLight 要素上の属性 elevation に対応する。

インターフェイス SVGFEPointLightElement

SVGFEPointLightElement インターフェイスは fePointLight 要素に対応する。

interface SVGFEPointLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
};
属性:
x, 型は SVGAnimatedNumber、読み取り専用

指定された fePointLight 要素上の属性 x に対応する。

y, 型は SVGAnimatedNumber、読み取り専用

指定された fePointLight 要素上の属性 y に対応する。

z, 型は SVGAnimatedNumber、読み取り専用

指定された fePointLight 要素上の属性 z に対応する。

インターフェイス SVGFESpotLightElement

SVGFESpotLightElement インターフェイスは feSpotLight 要素に対応する。

interface SVGFESpotLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
  readonly attribute SVGAnimatedNumber pointsAtX;
  readonly attribute SVGAnimatedNumber pointsAtY;
  readonly attribute SVGAnimatedNumber pointsAtZ;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber limitingConeAngle;
};
属性:
x, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 x に対応する。

y, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 y に対応する。

z, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 z に対応する。

pointsAtX, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 pointsAtX に対応する。

pointsAtY, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 pointsAtY に対応する。

pointsAtZ, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 pointsAtZ に対応する。

specularExponent, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 specularExponent に 対応する。

limitingConeAngle, 型は SVGAnimatedNumber、読み取り専用

指定された feSpotLight 要素上の属性 limitingConeAngle に 対応する。

インターフェイス SVGFEDisplacementMapElement

SVGFEDisplacementMapElement インターフェイスは feDisplacementMap 要素に対応する。

interface SVGFEDisplacementMapElement : SVGElement {

  // チャンネルセレクター
  const unsigned short SVG_CHANNEL_UNKNOWN = 0;
  const unsigned short SVG_CHANNEL_R = 1;
  const unsigned short SVG_CHANNEL_G = 2;
  const unsigned short SVG_CHANNEL_B = 3;
  const unsigned short SVG_CHANNEL_A = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedNumber scale;
  readonly attribute SVGAnimatedEnumeration xChannelSelector;
  readonly attribute SVGAnimatedEnumeration yChannelSelector;
};

SVGFEDisplacementMapElement includes SVGFilterPrimitiveStandardAttributes;
グループ「チャンネルセレクター」の定数:
SVG_CHANNEL_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_CHANNEL_R

R に対応する。

SVG_CHANNEL_G

G に対応する。

SVG_CHANNEL_B

B に対応する。

SVG_CHANNEL_A

A に対応する。

属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feDisplacementMap 要素上の属性 in に対応する。

in2, 型は SVGAnimatedString、読み取り専用

指定された feDisplacementMap 要素上の属性 in2 に対応する。

scale, 型は SVGAnimatedNumber、読み取り専用

指定された feDisplacementMap 要素上の属性 scale に対応する。

xChannelSelector, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feDisplacementMap 要素上の属性 xChannelSelector に対応する。このインターフェイスで定義される SVG_CHANNEL_* 定数のいずれかを取る。

yChannelSelector, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feDisplacementMap 要素上の属性 yChannelSelector に対応する。このインターフェイスで定義される SVG_CHANNEL_* 定数のいずれかを取る。

インターフェイス SVGFEDropShadowElement

SVGFEDropShadowElement インターフェイスは feDropShadow 要素に対応する。

interface SVGFEDropShadowElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEDropShadowElement includes SVGFilterPrimitiveStandardAttributes;
属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feDropShadow 要素上の属性 in に対応する。

dx, 型は SVGAnimatedNumber、読み取り専用

指定された feDropShadow 要素上の属性 dx に対応する。

dy, 型は SVGAnimatedNumber、読み取り専用

指定された feDropShadow 要素上の属性 dy に対応する。

stdDeviationX, 型は SVGAnimatedNumber、読み取り専用

指定された feDropShadow 要素上の属性 stdDeviation に対応する。属性 stdDeviation の X 成分を含む。

stdDeviationY, 型は SVGAnimatedNumber、読み取り専用

指定された feDropShadow 要素上の属性 stdDeviation に対応する。属性 stdDeviation の Y 成分を含む。

メソッド:
setStdDeviation(stdDeviationX, stdDeviationY)

属性 stdDeviation の値を設定する。

stdDeviationX

属性 stdDeviation の X 成分。

stdDeviationY

属性 stdDeviation の Y 成分。

インターフェイス SVGFEFloodElement

SVGFEFloodElement インターフェイスは feFlood 要素に対応する。

interface SVGFEFloodElement : SVGElement {
};

SVGFEFloodElement includes SVGFilterPrimitiveStandardAttributes;

インターフェイス SVGFEGaussianBlurElement

SVGFEGaussianBlurElement インターフェイスは feGaussianBlur 要素に対応する。

interface SVGFEGaussianBlurElement : SVGElement {

  // エッジモード値
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;
  readonly attribute SVGAnimatedEnumeration edgeMode;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEGaussianBlurElement includes SVGFilterPrimitiveStandardAttributes;
グループ「エッジモード値」の定数:
SVG_EDGEMODE_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_EDGEMODE_DUPLICATE

duplicate に対応する。

SVG_EDGEMODE_WRAP

wrap に対応する。

SVG_EDGEMODE_NONE

none に対応する。

属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feGaussianBlur 要素上の属性 in に対応する。

stdDeviationX, 型は SVGAnimatedNumber、読み取り専用

指定された feGaussianBlur 要素上の属性 stdDeviation に対応する。属性 stdDeviation の X 成分を含む。

stdDeviationY, 型は SVGAnimatedNumber、読み取り専用

指定された feGaussianBlur 要素上の属性 stdDeviation に対応する。属性 stdDeviation の Y 成分を含む。

edgeMode, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feGaussianBlur 要素上の属性 edgeMode に対応する。このインターフェイスで定義される SVG_EDGEMODE_* 定数のいずれかを取る。

メソッド:
setStdDeviation(stdDeviationX, stdDeviationY)

属性 stdDeviation の値を設定する。

stdDeviationX

属性 stdDeviation の X 成分。

stdDeviationY

属性 stdDeviation の Y 成分。

インターフェイス SVGFEImageElement

SVGFEImageElement インターフェイスは feImage 要素に対応する。

interface SVGFEImageElement : SVGElement {
  readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
  readonly attribute SVGAnimatedString crossOrigin;
};

SVGFEImageElement includes SVGFilterPrimitiveStandardAttributes;
SVGFEImageElement includes SVGURIReference;
属性:
preserveAspectRatio, 型は SVGAnimatedPreserveAspectRatio、 読み取り専用

指定された feImage 要素上の属性 preserveAspectRatio に 対応する。

crossOrigin, 型は SVGAnimatedString、読み取り専用

crossOrigin IDL 属性は crossorigin コンテンツ属性を反映しなければならず、 既知の値のみに制限される。

インターフェイス SVGFEMergeElement

SVGFEMergeElement インターフェイスは feMerge 要素に対応する。

interface SVGFEMergeElement : SVGElement {
};

SVGFEMergeElement includes SVGFilterPrimitiveStandardAttributes;

インターフェイス SVGFEMergeNodeElement

SVGFEMergeNodeElement インターフェイスは feMergeNode 要素に対応する。

interface SVGFEMergeNodeElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};
属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feMergeNode 要素上の属性 in に対応する。

インターフェイス SVGFEMorphologyElement

SVGFEMorphologyElement インターフェイスは feMorphology 要素に対応する。

interface SVGFEMorphologyElement : SVGElement {

  // モルフォロジー演算子
  const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE = 2;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber radiusX;
  readonly attribute SVGAnimatedNumber radiusY;
};

SVGFEMorphologyElement includes SVGFilterPrimitiveStandardAttributes;
グループ「モルフォロジー演算子」の定数:
SVG_MORPHOLOGY_OPERATOR_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_MORPHOLOGY_OPERATOR_ERODE

erode に対応する。

SVG_MORPHOLOGY_OPERATOR_DILATE

dilate に対応する。

属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feMorphology 要素上の属性 in に対応する。

operator, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feMorphology 要素上の属性 operator に対応する。このインターフェイスで定義される SVG_MORPHOLOGY_OPERATOR_* 定数のいずれかを取る。

radiusX, 型は SVGAnimatedNumber、読み取り専用

指定された feMorphology 要素上の属性 radius に対応する。属性 radius の X 成分を含む。

radiusY, 型は SVGAnimatedNumber、読み取り専用

指定された feMorphology 要素上の属性 radius に対応する。属性 radius の Y 成分を含む。

インターフェイス SVGFEOffsetElement

SVGFEOffsetElement インターフェイスは feOffset 要素に対応する。

interface SVGFEOffsetElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
};

SVGFEOffsetElement includes SVGFilterPrimitiveStandardAttributes;
属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feOffset 要素上の属性 in に対応する。

dx, 型は SVGAnimatedNumber、読み取り専用

指定された feOffset 要素上の属性 dx に対応する。

dy, 型は SVGAnimatedNumber、読み取り専用

指定された feOffset 要素上の属性 dy に対応する。

インターフェイス SVGFESpecularLightingElement

SVGFESpecularLightingElement インターフェイスは feSpecularLighting 要素に対応する。

interface SVGFESpecularLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber specularConstant;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFESpecularLightingElement includes SVGFilterPrimitiveStandardAttributes;
属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feSpecularLighting 要素上の属性 in に対応する。

surfaceScale, 型は SVGAnimatedNumber、読み取り専用

指定された feSpecularLighting 要素上の属性 surfaceScale に 対応する。

specularConstant, 型は SVGAnimatedNumber、読み取り専用

指定された feSpecularLighting 要素上の属性 specularConstant に対応する。

specularExponent, 型は SVGAnimatedNumber、読み取り専用

指定された feSpecularLighting 要素上の属性 specularExponent に対応する。

kernelUnitLengthX, 型は SVGAnimatedNumber、読み取り専用

指定された feSpecularLighting 要素上の属性 kernelUnitLength に対応する。

kernelUnitLengthY, 型は SVGAnimatedNumber、読み取り専用

指定された feSpecularLighting 要素上の属性 kernelUnitLength に対応する。

インターフェイス SVGFETileElement

SVGFETileElement インターフェイスは feTile 要素に対応する。

interface SVGFETileElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFETileElement includes SVGFilterPrimitiveStandardAttributes;
属性:
in1, 型は SVGAnimatedString、読み取り専用

指定された feTile 要素上の属性 in に対応する。

インターフェイス SVGFETurbulenceElement

SVGFETurbulenceElement インターフェイスは feTurbulence 要素に対応する。

interface SVGFETurbulenceElement : SVGElement {

  // Turbulence の型
  const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
  const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
  const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE = 2;

  // ステッチオプション
  const unsigned short SVG_STITCHTYPE_UNKNOWN = 0;
  const unsigned short SVG_STITCHTYPE_STITCH = 1;
  const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;

  readonly attribute SVGAnimatedNumber baseFrequencyX;
  readonly attribute SVGAnimatedNumber baseFrequencyY;
  readonly attribute SVGAnimatedInteger numOctaves;
  readonly attribute SVGAnimatedNumber seed;
  readonly attribute SVGAnimatedEnumeration stitchTiles;
  readonly attribute SVGAnimatedEnumeration type;
};

SVGFETurbulenceElement includes SVGFilterPrimitiveStandardAttributes;
グループ「Turbulence の型」の定数:
SVG_TURBULENCE_TYPE_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_TURBULENCE_TYPE_FRACTALNOISE

fractalNoise に対応する。

SVG_TURBULENCE_TYPE_TURBULENCE

turbulence に対応する。

グループ「ステッチオプション」の定数:
SVG_STITCHTYPE_UNKNOWN

型が定義済みの型のいずれでもない。この型の新しい値を定義しようとしたり、 既存の値をこの型に切り替えようとしたりすることは無効である。

SVG_STITCHTYPE_STITCH

stitch に対応する。

SVG_STITCHTYPE_NOSTITCH

noStitch に対応する。

属性:
baseFrequencyX, 型は SVGAnimatedNumber、読み取り専用

指定された feTurbulence 要素上の属性 baseFrequency に対応する。 baseFrequency 属性の X 成分を含む。

baseFrequencyY, 型は SVGAnimatedNumber、読み取り専用

指定された feTurbulence 要素上の属性 baseFrequency に対応する。 baseFrequency 属性の Y 成分を含む。

numOctaves, 型は SVGAnimatedInteger、読み取り専用

指定された feTurbulence 要素上の属性 numOctaves に対応する。

seed, 型は SVGAnimatedNumber、読み取り専用

指定された feTurbulence 要素上の属性 seed に対応する。

stitchTiles, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feTurbulence 要素上の属性 stitchTiles に対応する。このインターフェイスで定義される SVG_TURBULENCE_TYPE_* 定数のいずれかを取る。

type, 型は SVGAnimatedEnumeration、 読み取り専用

指定された feTurbulence 要素上の属性 type に対応する。このインターフェイスで定義される SVG_STITCHTYPE_* 定数のいずれかを取る。

変更点

2014年11月25日の作業草案以降、次の重要な変更が行われた。

2013年11月26日の作業草案以降、次の重要な変更が行われた。

2012年10月25日の作業草案以降、次の重要な変更が行われた。

より詳細で長期にわたる変更については、ChangeLog を参照。

謝辞

編集者は、Robert O’Callahan、Coralie Mercier、Chris Lilley、Nikos Andronikos、Stephen Chenney、Simon Fraser、Tavmjong Bah、Robert Longson、Cameron McCormack、Brad Kemper、Tab Atkins、Brian Birtles、Michael Mullany、Rik Cabanier、Anne van Kesteren、Boris Zbarsky、Kristopher Giesing、Stephen White、 Jasper van de Gronde、Kang-Hao Lu、Paul LeBeau、Debarshi Ray、Jarek Foksa、Sebastian Zartner、Yuqian Li、 Amelia Bellamy-Royds、Max Vujovic の丁寧なレビュー、コメント、および修正に感謝する。

適合性

文書の規約

適合性要件は、記述的な表明と RFC 2119 の用語を組み合わせて表現される。この文書の規範的な部分におけるキーワード “MUST”、 “MUST NOT”、 “REQUIRED”、 “SHALL”、 “SHALL NOT”、 “SHOULD”、 “SHOULD NOT”、 “RECOMMENDED”、 “MAY”、および “OPTIONAL” は、RFC 2119 で説明されているとおりに解釈される。 ただし、読みやすさのため、この仕様ではこれらの語をすべて大文字では 表記しない。

この仕様のすべての文章は、明示的に非規範的と記された節、 例、および注を除き、規範的である。 [RFC2119]

この仕様の例は、“for example” という語で導入されるか、 class="example" によって規範的な文章から区別される。 次のようになる:

これは参考情報としての例の一例である。

参考情報としての注は “Note” という語で始まり、 class="note" によって規範的な文章から区別される。 次のようになる:

注: これは参考情報としての注である。

勧告は、特に注意を引くようスタイル設定された規範的な節であり、 <strong class="advisement"> によって他の規範的な文章から区別される。 次のようになる: UA はアクセシブルな代替手段を提供しなければならない。

適合クラス

この仕様への適合性は、 3 つの適合クラスについて定義される:

スタイルシート
CSS スタイルシート
レンダラー
スタイルシートの意味を解釈し、 それを使用する文書をレンダリングする UA
オーサリングツール
スタイルシートを書き出す UA

スタイルシートは、このモジュールで定義される構文を使用するすべての文が、 一般的な CSS 文法およびこのモジュールで定義される各機能の 個別の文法に従って妥当である場合、この仕様に適合する。

レンダラーは、適切な仕様で定義されるとおりに スタイルシートを解釈することに加え、この仕様で定義されるすべての機能を 正しく解析し、それに従って文書をレンダリングすることでサポートする場合、 この仕様に適合する。ただし、デバイスの制限により UA が文書を正しくレンダリングできないことによって、 UA が不適合になるわけではない。(たとえば、UA は モノクロモニター上で色をレンダリングすることを要求されない。)

オーサリングツールは、一般的な CSS 文法および このモジュール内の各機能の個別の文法に従って構文的に正しい スタイルシートを書き出し、このモジュールで説明される スタイルシートのその他すべての適合性要件を満たす場合、この仕様に適合する。

CSS の責任ある 実装に関する要件

以下の節では、現在および将来の相互運用性を促進する方法で CSS を責任を持って実装するための、 いくつかの適合性要件を定義する。

部分実装

作者が前方互換の解析規則を利用してフォールバック値を割り当てられるようにするため、CSS レンダラーは 使用可能なレベルのサポートを持たない あらゆる at-rule、プロパティ、プロパティ値、キーワード、およびその他の構文構造を 無効として扱い (そして適切に無視し) なければならない。 特に、ユーザーエージェントは、1 つの複数値プロパティ宣言内で、 サポートされていないプロパティ値だけを選択的に無視し、サポートされている値を採用してはならない: いずれかの値が無効とみなされる場合(サポートされていない値はそうみなさなければならない)、 CSS は宣言全体を無視することを要求する。

不安定な機能および 独自機能の実装

将来の安定した CSS 機能との衝突を避けるため、 CSSWG は、CSS の 不安定な機能および 独自拡張の実装について ベストプラクティスに従うことを推奨する。

CR レベルの 機能の実装

仕様が勧告候補段階に達したら、 実装者は、仕様に従って正しく実装されていることを実証できる CR レベルの機能について プレフィックスなしの実装を公開すべきであり、 その機能のプレフィックス付きバリアントを公開することは避けるべきである。

実装間で CSS の相互運用性を確立し維持するため、 CSS Working Group は、実験的でない CSS レンダラーが、CSS 機能のプレフィックスなしの実装を公開する前に、 実装レポート(必要であれば、その実装レポートで使用した テストケースも)を W3C に提出することを求める。W3C に 提出されたテストケースは、CSS Working Group によるレビューおよび修正の対象となる。

テストケースおよび実装レポートの提出に関する詳細情報は、 CSS Working Group のウェブサイト https://www.w3.org/Style/CSS/Test/ で確認できる。 質問は public-css-testsuite@w3.org メーリング リストに送ること。

索引

この仕様で定義される 用語

参照によって定義される 用語

参考文献

規範的参考文献

[COMPOSITING-1]
Rik Cabanier; Nikos Andronikos. 合成とブレンディング レベル 1. 2015年1月13日. CR. URL: https://www.w3.org/TR/compositing-1/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS カスケードと継承 レベル 4. 2018年8月28日. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley. CSS カラーモジュール レベル 4. 2016年7月5日. WD. URL: https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS ディスプレイモジュール レベル 3. 2018年8月28日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley. CSS フォントモジュール レベル 3. 2018年9月20日. REC. URL: https://www.w3.org/TR/css-fonts-3/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS フォントモジュール レベル 4. 2018年9月20日. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS マスキング モジュール レベル 1. 2014年8月26日. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS オーバーフロー モジュール レベル 3. 2018年7月31日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Rossen Atanassov; Arron Eicholz. CSS 配置レイアウト モジュール レベル 3. 2016年5月17日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS テキストモジュール レベル 3. 2018年12月12日. WD. URL: https://www.w3.org/TR/css-text-3/
[CSS-TEXT-DECOR-3]
Elika Etemad; Koji Ishii. CSS テキスト装飾モジュール レベル 3. 2018年7月3日. CR. URL: https://www.w3.org/TR/css-text-decor-3/
[CSS-TRANSFORMS-1]
Simon Fraser; ほか. CSS 変形モジュール レベル 1. 2018年11月30日. WD. URL: https://www.w3.org/TR/css-transforms-1/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS 基本ユーザーインターフェイスモジュール レベル 3 (CSS3 UI). 2018年6月21日. REC. URL: https://www.w3.org/TR/css-ui-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 値と単位モジュール レベル 4. 2018年10月10日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS 書字方向 レベル 3. 2018年5月24日. CR. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS 書字方向 レベル 4. 2018年5月24日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; ほか. カスケーディングスタイルシート レベル 2 改訂 1 (CSS 2.1) 仕様. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS2/
[CSS3-IMAGES]
Elika Etemad; Tab Atkins Jr.. CSS 画像値と置換コンテンツ モジュール レベル 3. 2012年4月17日. CR. URL: https://www.w3.org/TR/css3-images/
[CSS3BG]
Bert Bos; Elika Etemad; Brad Kemper. CSS 背景と ボーダーモジュール レベル 3. 2017年10月17日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS3COLOR]
Tantek Çelik; Chris Lilley; David Baron. CSS カラーモジュール レベル 3. 2018年6月19日. REC. URL: https://www.w3.org/TR/css-color-3/
[CSS3VAL]
Tab Atkins Jr.; Elika Etemad. CSS 値と単位モジュール レベル 3. 2018年8月14日. CR. URL: https://www.w3.org/TR/css-values-3/
[HTML]
Anne van Kesteren; ほか. HTML 標準. 現行 標準. URL: https://html.spec.whatwg.org/multipage/
[HTML5]
Ian Hickson; ほか. HTML5. 2018年3月27日. REC. URL: https://www.w3.org/TR/html5/
[MEDIAQUERIES-5]
メディアクエリ レベル 5 URL: https://drafts.csswg.org/mediaqueries-5/
[RFC2119]
S. Bradner. 要求レベルを示すために RFC で使用するキーワード. 1997年3月. 現行のベストプラクティス. URL: https://tools.ietf.org/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. セレクター レベル 4. 2018年11月21日. WD. URL: https://www.w3.org/TR/selectors-4/
[SVG11]
Erik Dahlström; ほか. Scalable Vector Graphics (SVG) 1.1(第2版). 2011年8月16日. REC. URL: https://www.w3.org/TR/SVG11/
[SVG2]
Amelia Bellamy-Royds; ほか. Scalable Vector Graphics (SVG) 2. 2018年10月4日. CR. URL: https://www.w3.org/TR/SVG2/
[WebIDL]
Cameron McCormack; Boris Zbarsky; Tobie Langel. Web IDL. 2016年12月15日. ED. URL: https://heycam.github.io/webidl/

参考文献

[ArTD]
B. Jacob. 算術演算のタイミング 差. URL: https://wiki.mozilla.org/User:Bjacob/ArithmeticTimingDifferences
[Cmam]
IEC. IEC 61966-2-1:1999 色の測定と管理 - パート 2-1: 色管理 - 既定の RGB 色空間 - sRGB. URL: https://webstore.iec.ch/publication/6169
[CSS3-ANIMATIONS]
Dean Jackson; ほか. CSS アニメーション レベル 1. 2018年10月11日. WD. URL: https://www.w3.org/TR/css-animations-1/
[PORTERDUFF]
Thomas Porter; Tom Duff. デジタル画像の合成。
[TaM]
Ebert ほか, AP Professional. テクスチャリングとモデリング。1994年。

プロパティ索引

名前 初期値 適用対象 継承 パーセンテージ アニメーション可能 正規順序 算出値 メディア
color-interpolation-filters auto | sRGB | linearRGB linearRGB すべてのフィルタープリミティブ はい 該当なし いいえ 文法に従う 指定どおり 視覚
filter none | <filter-value-list> none すべての要素。SVG では、defs 要素を除くコンテナー要素、すべてのグラフィックス 要素、および use 要素に適用される。 いいえ 該当なし 「フィルターのアニメーション」の本文を参照。 文法に従う 指定どおり 視覚
flood-color <color> black feFlood および feDropShadow 要素 いいえ 該当なし 色として 文法に従う 指定どおり 視覚
flood-opacity <alpha-value> 1 feFlood および feDropShadow 要素 いいえ 該当なし 数値またはパーセンテージとして 文法に従う 指定値を数値に変換し、[0,1] の範囲にクランプした値 視覚
lighting-color <color> white feDiffuseLighting および feSpecularLighting 要素 いいえ 該当なし 色として 文法に従う 指定どおり 視覚

IDL 索引

interface SVGFilterElement : SVGElement {
  readonly attribute SVGAnimatedEnumeration filterUnits;
  readonly attribute SVGAnimatedEnumeration primitiveUnits;
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
};

SVGFilterElement includes SVGURIReference;

interface mixin SVGFilterPrimitiveStandardAttributes {
  readonly attribute SVGAnimatedLength x;
  readonly attribute SVGAnimatedLength y;
  readonly attribute SVGAnimatedLength width;
  readonly attribute SVGAnimatedLength height;
  readonly attribute SVGAnimatedString result;
};

interface SVGFEBlendElement : SVGElement {

  // Blend Mode Types
  const unsigned short SVG_FEBLEND_MODE_UNKNOWN = 0;
  const unsigned short SVG_FEBLEND_MODE_NORMAL = 1;
  const unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
  const unsigned short SVG_FEBLEND_MODE_SCREEN = 3;
  const unsigned short SVG_FEBLEND_MODE_DARKEN = 4;
  const unsigned short SVG_FEBLEND_MODE_LIGHTEN = 5;
  const unsigned short SVG_FEBLEND_MODE_OVERLAY = 6;
  const unsigned short SVG_FEBLEND_MODE_COLOR_DODGE = 7;
  const unsigned short SVG_FEBLEND_MODE_COLOR_BURN = 8;
  const unsigned short SVG_FEBLEND_MODE_HARD_LIGHT = 9;
  const unsigned short SVG_FEBLEND_MODE_SOFT_LIGHT = 10;
  const unsigned short SVG_FEBLEND_MODE_DIFFERENCE = 11;
  const unsigned short SVG_FEBLEND_MODE_EXCLUSION = 12;
  const unsigned short SVG_FEBLEND_MODE_HUE = 13;
  const unsigned short SVG_FEBLEND_MODE_SATURATION = 14;
  const unsigned short SVG_FEBLEND_MODE_COLOR = 15;
  const unsigned short SVG_FEBLEND_MODE_LUMINOSITY = 16;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration mode;
};

SVGFEBlendElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEColorMatrixElement : SVGElement {

  // Color Matrix Types
  const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
  const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
  const unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
  const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList values;
};

SVGFEColorMatrixElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEComponentTransferElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFEComponentTransferElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGComponentTransferFunctionElement : SVGElement {

  // Component Transfer Types
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4;
  const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5;

  readonly attribute SVGAnimatedEnumeration type;
  readonly attribute SVGAnimatedNumberList tableValues;
  readonly attribute SVGAnimatedNumber slope;
  readonly attribute SVGAnimatedNumber intercept;
  readonly attribute SVGAnimatedNumber amplitude;
  readonly attribute SVGAnimatedNumber exponent;
  readonly attribute SVGAnimatedNumber offset;
};

interface SVGFEFuncRElement : SVGComponentTransferFunctionElement {
};

interface SVGFEFuncGElement : SVGComponentTransferFunctionElement {
};

interface SVGFEFuncBElement : SVGComponentTransferFunctionElement {
};

interface SVGFEFuncAElement : SVGComponentTransferFunctionElement {
};

interface SVGFECompositeElement : SVGElement {

  // Composite Operators
  const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OVER = 1;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_IN = 2;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_OUT = 3;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_XOR = 5;
  const unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber k1;
  readonly attribute SVGAnimatedNumber k2;
  readonly attribute SVGAnimatedNumber k3;
  readonly attribute SVGAnimatedNumber k4;
};

SVGFECompositeElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEConvolveMatrixElement : SVGElement {

  // Edge Mode Values
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedInteger orderX;
  readonly attribute SVGAnimatedInteger orderY;
  readonly attribute SVGAnimatedNumberList kernelMatrix;
  readonly attribute SVGAnimatedNumber divisor;
  readonly attribute SVGAnimatedNumber bias;
  readonly attribute SVGAnimatedInteger targetX;
  readonly attribute SVGAnimatedInteger targetY;
  readonly attribute SVGAnimatedEnumeration edgeMode;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
  readonly attribute SVGAnimatedBoolean preserveAlpha;
};

SVGFEConvolveMatrixElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEDiffuseLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber diffuseConstant;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFEDiffuseLightingElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEDistantLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber azimuth;
  readonly attribute SVGAnimatedNumber elevation;
};

interface SVGFEPointLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
};

interface SVGFESpotLightElement : SVGElement {
  readonly attribute SVGAnimatedNumber x;
  readonly attribute SVGAnimatedNumber y;
  readonly attribute SVGAnimatedNumber z;
  readonly attribute SVGAnimatedNumber pointsAtX;
  readonly attribute SVGAnimatedNumber pointsAtY;
  readonly attribute SVGAnimatedNumber pointsAtZ;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber limitingConeAngle;
};

interface SVGFEDisplacementMapElement : SVGElement {

  // Channel Selectors
  const unsigned short SVG_CHANNEL_UNKNOWN = 0;
  const unsigned short SVG_CHANNEL_R = 1;
  const unsigned short SVG_CHANNEL_G = 2;
  const unsigned short SVG_CHANNEL_B = 3;
  const unsigned short SVG_CHANNEL_A = 4;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedString in2;
  readonly attribute SVGAnimatedNumber scale;
  readonly attribute SVGAnimatedEnumeration xChannelSelector;
  readonly attribute SVGAnimatedEnumeration yChannelSelector;
};

SVGFEDisplacementMapElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEDropShadowElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEDropShadowElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEFloodElement : SVGElement {
};

SVGFEFloodElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEGaussianBlurElement : SVGElement {

  // Edge Mode Values
  const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
  const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
  const unsigned short SVG_EDGEMODE_WRAP = 2;
  const unsigned short SVG_EDGEMODE_NONE = 3;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber stdDeviationX;
  readonly attribute SVGAnimatedNumber stdDeviationY;
  readonly attribute SVGAnimatedEnumeration edgeMode;

  void setStdDeviation(float stdDeviationX, float stdDeviationY);
};

SVGFEGaussianBlurElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEImageElement : SVGElement {
  readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
  readonly attribute SVGAnimatedString crossOrigin;
};

SVGFEImageElement includes SVGFilterPrimitiveStandardAttributes;
SVGFEImageElement includes SVGURIReference;

interface SVGFEMergeElement : SVGElement {
};

SVGFEMergeElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEMergeNodeElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

interface SVGFEMorphologyElement : SVGElement {

  // Morphology Operators
  const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
  const unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE = 2;

  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedEnumeration operator;
  readonly attribute SVGAnimatedNumber radiusX;
  readonly attribute SVGAnimatedNumber radiusY;
};

SVGFEMorphologyElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFEOffsetElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber dx;
  readonly attribute SVGAnimatedNumber dy;
};

SVGFEOffsetElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFESpecularLightingElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
  readonly attribute SVGAnimatedNumber surfaceScale;
  readonly attribute SVGAnimatedNumber specularConstant;
  readonly attribute SVGAnimatedNumber specularExponent;
  readonly attribute SVGAnimatedNumber kernelUnitLengthX;
  readonly attribute SVGAnimatedNumber kernelUnitLengthY;
};

SVGFESpecularLightingElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFETileElement : SVGElement {
  readonly attribute SVGAnimatedString in1;
};

SVGFETileElement includes SVGFilterPrimitiveStandardAttributes;

interface SVGFETurbulenceElement : SVGElement {

  // Turbulence Types
  const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
  const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
  const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE = 2;

  // Stitch Options
  const unsigned short SVG_STITCHTYPE_UNKNOWN = 0;
  const unsigned short SVG_STITCHTYPE_STITCH = 1;
  const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;

  readonly attribute SVGAnimatedNumber baseFrequencyX;
  readonly attribute SVGAnimatedNumber baseFrequencyY;
  readonly attribute SVGAnimatedInteger numOctaves;
  readonly attribute SVGAnimatedNumber seed;
  readonly attribute SVGAnimatedEnumeration stitchTiles;
  readonly attribute SVGAnimatedEnumeration type;
};

SVGFETurbulenceElement includes SVGFilterPrimitiveStandardAttributes;

課題索引

固定背景画像に対して filter はどのように動作するか? <https://github.com/w3c/csswg-drafts/issues/238>
値リストの項目数が無効な場合、どのように動作すべきか? <https://github.com/w3c/csswg-drafts/issues/237>
実装が仕様と一致していない。 <https://github.com/w3c/csswg-drafts/issues/113>
フィルター関数の距離を計算する。 <https://github.com/w3c/csswg-drafts/issues/91>