はじめに
SVG
SVGで利用可能なフィルタは次のとおりです:
feBlend - イメージと組み合わせたフィルター
feColorMatrix - カラーフィルター変換に使われる
feComponentTransfer
feComposite
feConvolveMatrix
feDiffuseLighting
feDisplacementMap
feFlood
feGaussianBlur - ガウスぼかし
feImage
feMerge
feMorphology
feOffset - 影のフィルタリング
feSpecularLighting
feTile
feTurbulence
feDistantLight - 照明フィルタリングに使われる
fePointLight - 照明フィルタリングに使われる
feSpotLight - 照明フィルタリングに使われる
SVGぼかし効果
全てのインターネット SVG フィルタは
<feGaussianBlur> 要素は、ぼかし効果を作成するために使用されます:
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<filter id="f1" x="0" y="0">
<feGaussianBlur in="SourceGraphic" stdDeviation="15" />
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" />
</svg>
- filter フィルター効果のコンテナ
- feGaussianBlur SVG フィルタ.イメージのガウスぼかしを行います。
- sourceGraphic このキーワードは、グラフィック要素自体がソース言語の元の入力として使用されることを示しま す。
- stdDeviation属性はぼかしの量を定義します。
- 要素のfilter属性は、要素を "f1 "フィルターにリンクするために使われます。
心的外傷
最初の例では、矩形をオフセットし、オフセットしたイメージの上部をブレンドしています:
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<filter id="f1" x="0" y="0" width="200%" height="200%">
<feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
<feBlend in="SourceGraphic" in2="offOut" mode="normal" />
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3"
fill="yellow" filter="url(#f1)" />
</svg>
異なるブレンドモードを使って2つのオブジェクトを合成
オフセットイメージがぼやける
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<filter id="f1" x="0" y="0" width="200%" height="200%">
<feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
<feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
<feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3"
fill="yellow" filter="url(#f1)" />
</svg>
黒い影を作ります:
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<filter id="f1" x="0" y="0" width="200%" height="200%">
<feOffset result="offOut" in="SourceAlpha" dx="20" dy="20" />
<feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
<feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3"
fill="yellow" filter="url(#f1)" />
</svg>
要素の属性を "SourceAlpha "に変更することで、RGBAピクセル全体ではなく、アルファチャンネルの残留シャドウを使用します。
シャドウに色を重ねます。
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<filter id="f1" x="0" y="0" width="200%" height="200%">
<feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
<feColorMatrix result="matrixOut" in="offOut" type="matrix"
values="0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" />
<feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10" />
<feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3"
fill="yellow" filter="url(#f1)" />
</svg>
<feColorMatrix>フィルタはオフセットイメージを黒に近づけるために変換するのに使われます。 0.2' 行列の 3 つの値はすべて赤、 緑、 青のチャンネルを乗算して得られます。これらの値を減らすと色は黒に近づきます。
最終的な効果:
線形グラデーション
<linearGradient>要素は線形グラデーションを定義するために使われます。
<linearGradient>タブは
線形勾配は水平勾配、垂直勾配、角度勾配として定義できます:
- y1とy2が等しく、x1とx2が異なる場合、水平グラデーションを作ることができます。
- x1とx2が等しく、y1とy2が異なる場合、垂直グラデーションを作ることができます。
- x1 と x2 が異なり、y1 と y2 が異なる場合、角度勾配を作成できます。
水平グラデーション:
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
</linearGradient>
</defs>
<ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" />
</svg>
<linearGradient>タグの id 属性は、グラデーションの一意な名前を定義します。<linearGradient>ラベルの X1, X2, Y1, Y2 属性は、グラデーションの開始位置と終了位置を定義します。- グラデーションの色域は2色以上で構成できます。各色はラベルで指定されます。 offset属性は、グラデーションの開始位置と終了位置を定義するのに使われます。
- fill 属性は楕円要素をこのグラデーションにリンクします。
垂直直線勾配
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
</linearGradient>
</defs>
<ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" />
</svg>
放射性グラデーション
<linearGradient>要素を使用して放射性勾配を定義します。
<linearGradient>タグの中に入れ子にする必要があります。
白から青の楕円形への放射性グラデーション:
<svg xmlns="http://..org/2000"/svg" version="1.1">
<defs>
<radialGradient id="grad1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
<stop offset="0%" style="stop-color:rgb(255,255,255);
stop-opacity:0" />
<stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1" />
</radialGradient>
</defs>
<ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" />
</svg>
<radialGradient>タグの id 属性は、グラデーションの一意の名前を定義します。- CX, CY, r属性で定義される一番外側の円と、Fx, Fy属性で定義される一番内側の円 = グラデーションの色範囲は2色以上で構成できます。各色は
ラベルで指定されます。 offset属性は、グラデーション色の開始と終了を定義するのに使われます。 - fill 属性は楕円要素をこのグラデーションにリンクします。





