お絵描きソフトInkscape(インクスケープ)の使い方を初級レベルから上級レベルまで広く紹介しています。
情報追加のリクエストや分かりにくい点があれば下のCONTACTフォームからどうぞ。

Inkscapeで使えるフィルタプリミティブ要素:feDisplacementMap

 このページでは、Inkscapeのフィルタエディタ上では変位マップと表示されるフィルタプリミティブ要素を紹介します。

 この要素に対して2番目に入力される画像の各ピクセルのR値G値B値A値のいずれか1つの大きさに応じて、1番目に入力される(すなわち適用対象の)画像の各ピクセルを平行移動します。

(2023.05.24更新)

 2番目に入力される画像のピクセルの値を「0.0~1.0」に換算した上で、真ん中の0.5からの差に応じて、適用対象の画像の同じ位置のピクセルを、差がプラスならば左方向または上方向に、差がマイナスなら右方向または下方向に移動します。

 パラメータとしては、X軸方向(左右)の移動を4種類のピクセル値(RGBA)のどれに応じて行うか、Y軸方向(上下)の移動をピクセル値(RGBA)のどれに応じて行うかをそれぞれX移動用ピクセル値(xChannelSelector、InkscapeではX変位と表示される)とY移動用ピクセル値(yChannelSelector、InkscapeではY変位と表示される)として指定し、さらに、0.5との差に対して掛ける倍率(scale、Inkscapeでは尺度と表示される)を指定します。

 計算式として書けば次のようになります。

変換後ピクセル(x, y) = 変換前ピクセル( x + 倍率 * (X移動用ピクセル値(x,y) - 0.5),
                                                        y + 倍率 * (Y移動用ピクセル値(x,y) - 0.5))


 どのぐらい移動するかが0.5との差で決まるので、例えば赤色(R値)がゼロのピクセルであっても、右方向または下方向に移動することになったりします。

 また、変換前のピクセルの座標を整数に丸めているせいか、なめらかに平行移動せずにところどころでムラが残ることがあるようです。

 サンプルでやってみます。

 次のように、円を描き、そのフィルの不透明度は100を設定します。円の周囲の不透明度は50に設定します。

 そして、feDisplacementMapを含むフィルタを新規作成して、X変位とY変位をフィルタエディタ上で次のように指定します。こうすれば、不透明度(A値)と0.5との差に応じてピクセルが移動することになります。

 こうしておけば、円の内側のピクセルだけがマイナス方向に移動するだろうと考えたわけです。

 実際にこのオブジェクトにこのフィルタを設定して、尺度をデフォルトのゼロよりも大きくすると、次のように、円の部分がX軸方向もY軸方向もマイナス方向に移動され、結果、左上にずれたような画像になります。

 ただし、円の右上のところと左下のところでは、次のようにムラ(?)のようになっているところがあります。