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

Inkscapeでクリッピングとマスキング

 このページでは、Inkscapeを使って画像を好きな形に沿って切り取る機能を紹介します。Inkscapeにはそのための2種類の機能が用意されていて、クリッピング機能とマスキング機能と呼ばれます。

 (参考:クリッピング/マスキング済みオブジェクトの選択

 (参考:クリッピング/マスキングの不思議な動作

 (参考:複数パスでまとめてクリッピングする

 (参考:クリッピング領域の形を編集する

 (参考:パスをつなぎ合わせる/切り離す

(2024.05.23更新)

クリッピング/マスキングとは

 Inkscape以外のお絵描きソフト一般では「画像を切り抜く」「画像をトリミングする」などのような呼び方もされる機能です。

 ビットマップ画像オブジェクトの一部分を切り取ることはもちろん、シェイプやテキストオブジェクトなども好きな形に切り取ることができます。

 Inkscapeの用語を使ってもう少し詳しく説明すると、次のようになります。

 「クリッピング」は、切り取る対象のオブジェクトの全体から、クリッピング用のオブジェクト(クリッピングパス)のフィル部分と重なっている領域だけを表示させる機能です。結果的にオブジェクトの一部分だけが切り取られて表示されているように見えます。

 「マスキング」は、マスキング対象のオブジェクトの各ピクセルの透明度を、それに重ねて描いたマスキング用オブジェクト(すなわちマスク)のフィル部分やストローク部分の透明度明度に応じて変化させる機能です。結果的にマスキング対象のオブジェクトのさらに下に重なっている他のオブジェクトがマスキング対象オブジェクトやマスキング用オブジェクトの形に沿った透け方で透けてみえるようになります。

 この書き方では、まだどんな機能なのかわかりにくいと思うので、具体的な例に沿ってさらに詳細に説明します。

クリッピング

 クリップ対象のオブジェクトに、クリッピング用のオブジェクト(クリップしたい形を描いたパスやシェイプ)を重ねて、その両方(クリップ対象のオブジェクトとクリッピング用のオブジェクト)を選択した状態で、メニューでオブジェクト > クリップ > クリップを設定を操作します。

 次の例では、緑の円(クリッピング対象オブジェクト)の全体から青いクリッピング用のオブジェクト(クリッピングパス)のフィル部分に重なっている部分だけが残って(切り取られて)表示される状態になります。

 複数のオブジェクトに同じクリッピングパスを設定するときは、その複数のオブジェクトと1個のクリッピング用のオブジェクトを同時に選択した状態で上のメニューを操作します。すると、1つのクリッピングパスを複数のオブジェクトのそれぞれとペアになるように自動的にコピーして、そのペアごとにクリッピングを実行してくれます。結果として、クリップを設定した後でクリップ対象のオブジェクトをバラバラに編集することができます。

 なお、環境設定ダイアログの振る舞い > クリップパスとマスクの画面で〇〇をグループに収めるを選択すると、クリップ対象の複数のオブジェクトを自動的にグループ化した上で、1つのクリッピングパスをコピーすることなくクリッピングを実行します。

 デフォルトでは、選択しているオブジェクトの中で一番上に重ねて描かれているものがクリッピング用のオブジェクトとして扱われます。重なりの上下を入れ替えてからクリップを設定すると、クリッピング対象のオブジェクトとクリッピング用オブジェクトも立場が入れ替わります。環境設定ダイアログの振る舞い > クリップパスとマスクの画面で適用したとき、最前面の選択オブジェクトをクリップパスまたはマスクとして使用するのチェックをはずすと、逆に最後面の選択オブジェクトが使われるようになるようです(ダイアログ上の説明には書かれていないですが、実際にやってみるとそうなる)。

 クリッピングの切り取りは、クリッピング用オブジェクトであるパスやシェイプのフィルの境界枠(すなわちアウトライン)のところで行われるので、ストロークのスタイルは関係ないようです。つまり、クリッピング用のオブジェクトのストロークの表示が太くても細くてもクリップされる領域は変わりません。もちろん、フィルに何が設定されているかも影響しません。

 また、これも当たり前かもしれませんが、「枠」に相当しないビットマップ画像オブジェクトはクリッピング用オブジェクトとしては使えません。

クリッピングパスの編集

 クリッピング済みのオブジェクトを選択しておいて、ノードツールをクリックし、さらに、ツールコントロールバー選択オブジェクトのクリッピングパスを表示をクリックすると、クリッピングパスも編集可能に表示してくれる(ただし、クリッピングパスがシェイプではなくパスオブジェクトの場合だけ)ので、通常のパスと同様に編集すればクリッピングされる領域を変形することもできます。

 ・・・ということらしいのですが、どうやらクリッピングパスそれ自体ではなく、クリッピングパスのアウトラインのほうが表示されるので、クリッピングパスを変形した結果とクリッピングされる領域とが一致しない場合もあるようです。

 また、クリッピング済みオブジェクトは、そのデータ構造上少し特殊な構造になっていて、「クリッピング済みオブジェクトを選択しておいて」とさらっと言いましたが、実は少しコツがあります。そのことについては「クリッピング/マスキング済みオブジェクトの選択について」のほうで。

クリップの解除

 クリッピング用のオブジェクトは直接編集できなくなるだけで、データとしてはクリッピングパス記述部分にそのまま残っています(消えているわけではありません)。

 オブジェクト > クリップ > クリップを解除を操作すると、クリッピング用のオブジェクトがクリッピング対象オブジェクトから取り除かれて、元のクリッピング用のオブジェクトに戻ります。そのまま編集してもう一度クリッピングすればクリッピングパスを編集したことになります。

複数の領域で同時にクリッピングする

 クリップ対象のオブジェクトに対して、同時に複数のクリッピングパスを設定するには、その複数のクリッピングパスを組み合わせて、切り取りたい領域を内側に含むような1個のパスにしてからクリップを設定します。

 例えば、離れたところの2個所の領域を切り取りたい場合や、ドーナツ状の領域を切り取りたい場合は、2つのクリッピングパスを描いた上でパス > 排他を操作すると、切り取りたい領域を内側に含む1つのパスになるので、それを使ってクリップを設定します。

 また、切り取りたい領域が2つのクリッピングパスを重ねたような形の場合は、パス > 統合を操作して1つのパスに合体してからクリップを設定します。

 もう少し具体的な例を「複数パスでまとめてクリッピングする」にまとめてあります。

クリッピングパスの外側だけ切り取る

 通常のクリッピングの場合、クリッピングパスの内側が切り取られて表示されますが、反対に絵の一部囲ったところだけ不要な場合などに、クリッピングパスの外側を切り取りたい(内側は非表示にしたい)ことがあります。

 Inkscapeの昔のバージョンではこれは複数のパスを結合してクリッピングパスにするような工夫が必要だったらしいですが、現在(ver 1.2以降)では、メニューでオブジェクト > クリップ > クリップを反転して設定を操作すればで同じことを一発で実行してくれます。

 この機能はパスエフェクトとして提供されています。(参考:パスエフェクト:パワークリップ

クリッピングとスナップ

 スナップ機能を使うと、2つのパスのノード同士をぴったり同じ位置に揃えることが簡単にできるようになりますが、クリッピングされているオブジェクトをスナップさせると次のようなことも可能になります。

  1. クリッピングによって切り取られて見えなくなったノードでもスナップする。
  2. クリッピングパスのノードでもスナップする。

 「2」の場合を例で示します。

 次のように星形のパスでクリッピングします。

 クリッピングされたオブジェクトを他のオブジェクト(この例では青い矩形)に向かってドラッグすると、クリッピングパスである星形のパスのノード(この例では左上のノード)にもスナップされます。

 この性質を使うと「絡まったパスを描く」ようなことも可能になります。

マスキング

 マスキングもクリッピングと同様に、マスキング対象のオブジェクトにマスキング用オブジェクトを重ねて、その両方(マスキング対象のオブジェクトとマスキング用オブジェクト)を選択した状態で、メニューでオブジェクト > マスク > マスクを設定を操作します。

 そうすると、マスキング用オブジェクトをフィルやストロークのスタイルも含めて「マスク」に変換します。「マスク」は<mask>・・・</mask>というSVGの要素の1つになっていて、マスキング対象のオブジェクトの属性(mask="・・・")の中で生成した「マスク」要素にリンクされます。この辺りの動作は、描いたオブジェクトをパターンシンボルとして登録するときの動作によく似ています。

  (参考:パターンを使って塗りつぶす

  (参考:シンボル(図形部品)を描く

 ところで、マスキングはクリッピングと違って、どんな効果があるのか理解するのは簡単ではありませんでした。

 マスキングとは、ちょっとややこしいのですが、マスキング対象のオブジェクトそれ自体がマスキング用オブジェクトを通してどのぐらい透けてみえるか、ではなくて、マスキング対象のオブジェクトよりさらに下にある他のオブジェクト(背景のオブジェクト)がマスキング対象オブジェクトを通してどのぐらい透けてみえるかをマスキング用オブジェクトを使って設定しているという機能なのです。

 マスキングはクリッピングと違い、マスキング用オブジェクトのフィルとストロークの両方を使って行われるので、ストロークが塗ってあるマスキング用オブジェクトを使うと、ストローク部分もマスキングすることができます。

 マスクを設定されたマスキング対象オブジェクトの不透明度がどのように決定されるのかをもう少し具体的に書くと、マスキング用オブジェクトのフィルやストロークのうち、明るさが最大(例えば白)、かつ、不透明度が最大のピクセルに重なっている部分で、マスキング対象のオブジェクトの不透明度が最大(つまり全く不透明)になり、明るさが最小(例えば黒)、かつ、不透明度が最小のピクセルに重なっている部分で、マスキング対象のオブジェクトの不透明度が最小(つまり全く透明)になります。(難しいので、この後の「やってみた」のほうを読んだほうが早いかもしれません)

 また、マスキング用オブジェクトの外側の領域では、マスキング対象オブジェクトは透明になります。

 マスキングは枠でなく「面」で行うので、パスやシェイプ以外にも、ビットマップオブジェクトもマスキング用オブジェクトとして使えます。

 複数のオブジェクトの組み合わせでマスキングしたい場合は、マスキング用オブジェクトを1つのグループにしてからマスクを設定メニューを操作します。


マスキング用オブジェクトの編集

 マスキング済みのオブジェクトを選択しておいて、ノードツールをクリックし、さらに、ツールコントロールバー選択オブジェクトのマスクを表示をクリックすると、マスキング用オブジェクトのアウトラインも編集可能に表示してくれるので、通常のパスと同様に編集すればマスクされる領域を編集することもできます。

 ただし、アウトラインは編集できますが、マスキング用オブジェクトのフィルやストロークの塗り方を編集することはできないので、マスキング対象オブジェクトの透け方を調整したい場合は、一旦マスクを解除する操作を行って、マスキング用オブジェクトを復活させて編集してから、元に戻す(もう一度マスクを設定する)必要があります。また、マスキング済みオブジェクトは、そのデータ構造上少し特殊な構造になっていて、「マスキング済みオブジェクトを選択しておいて」とさらっと言いましたが、実は少しコツがあります。そのことについては「クリッピング/マスキング済みオブジェクトの選択について」のほうで。

マスキングを実際にやってみた

 マスキングを実際にやってみました。緑色の矩形の上に青色の矩形を描き、そのさらに上にマスキング用のオブジェクトとして黒いパスを描き、パスの内側(フィル)にグラデーションを設定して、グラデーションの右端を「白で不透明度Max」に設定し、左端を「黒で不透明度ゼロ」に設定しました。

 そして、マスキング用のパスと青色の矩形(マスキング対象オブジェクト)を同時に選択して、メニューでオブジェクト > マスク > マスクを設定を操作すると、次のような表示になります。

 青色の矩形のうち、マスキング用のパスが重なっていないところは透明ですから、一番下の緑色の矩形がそのまま見えています。マスキング用のパスが重なっているところは、右の端が不透明で、左の端が透明なので、右の端では、下の緑色の矩形が全く透けてみえず、青色の矩形のほうが見えています。

 ちなみに、マスキング用のパスのストローク部分は黒なので、青色の矩形のうち、ストロークに重なっている部分は全く透明です。

 (参考:グラデーションを作る

Inkscapeの内部ではどうなってる?

 クリッピングマスキングも、Inkscapeの内部では、ストロークのスタイルなどと同じように、クリッピング用/マスキング用のオブジェクトを対象のオブジェクトの属性として付け加えたような構造になっています。

 レイヤーとオブジェクトダイアログを表示すると、オブジェクトごとに、クリッピング用/マスキング用のオブジェクトが設定されているかどうかがわかるアイコンが表示されます。

 すでに書いたように、クリッピングもマスキングも、対象のオブジェクトの上にクリッピング用/マスキング用のオブジェクトを重ねて描くことで設定しますが、クリッピング用/マスキング用のオブジェクトは、あくまでもクリッピングパスやマスクを設定するために一時的に入力するものなので、クリッピングパスやマスクを設定する操作によってクリッピングパス/マスクが対象オブジェクトの属性に付け加えられた時点で独立したオブジェクトとして存在しなくなり、画面からも消えます。(クリッピングやマスキングを解除すると、独立したオブジェクトとして復活します。)

クリッピング対象/マスキング対象オブジェクトの編集

 クリッピング用オブジェクトやマスキング用オブジェクトのアウトラインを編集することでクリッピングする領域やマスキングする領域の形を変えることは、上で書いたようにノードツールを使えば可能です。

 逆に、クリッピングする領域やマスキングする領域の形はそのままで、クリッピング対象のオブジェクトやマスキング対象のオブジェクトだけを編集したい場合もあります。その方法については、細かい話が必要なので「クリッピング/マスキング済みオブジェクトの選択について」のほうで。