HOME > 電算 > gimp メモ

gimp メモ

最終更新:2009-9-29(Tue)

これは、ペインティング・ソフト Gimp の使い方にかんする備忘録。操作は Linux 版で確認したものであるから、Windows 版などでは多少の異同があるかもしれない。

もくじ

Gimp 2.6 における選択領域の移動

範囲を選択したうえで、「選択範囲のフロート化」というを「選択」カスケード・メニューから実行すると、フローティング選択領域とよばれる一時的なレイヤーが自動的に作成され、範囲内の画像がそちらに移される。その一時的なレイヤー上で画像の場所を移動させ、それが済んだら選択範囲の外側をクリックし、その一時的なレイヤーの内容をもとのレイヤーに合体させる。

画像の移動という目的のためには、一時的に作成したレイヤーごと座標原点を移動させるのである。移動ツールは、それが一人前のレイヤーであろうと、フローティング選択領域と呼ばれる一時的なレイヤーだろうと、ともかくその座標原点を移動させる道具である。だから、フローティング選択領域をつくっていない状態で、移動ツールを用いると、一般的なレイヤーの原点座標が移動し、つまり、そのレイヤー上のすべての絵が移動してしまう。

Gimp 2.0 におけるパスの使い方

参考:主に http://docs.gimp.org/en/ch08s06.html#gimp-tool-path。パスダイアログについては http://docs.gimp.org/en/gimp-path-dialog.html

ペインティング・ソフトでのパスの必要性

どうして、Gimp のようなペインティング・ソフトで、ドローイング・ソフトのような「パス」という概念が出てくるのかというと、パスを作成しておいてから、これを「選択領域」に変換したり、パスを「ストローク描画」したりすることができるからにほかならない。フリーハンドのよたよたした線をまぬがれるためには、パスを使うことを検討するとよい。

また、Gimp は作成したパスは svg フォーマットで保存できる。そのため、JPEG などのラスタ画像を読み込んで、ドローイング・ソフトで読むためにトレースするという用途で Gimp のパス作成機能を使うこともできる。

用語の定義

一つ以上のコントロールポイント(あるいはノードという)をつないだ一連の長さ 0 以上の線をコンポーネントといい、二つのコントロールポイントにはさまれた線をセグメントという。コンポーネントは一つ以上集まってパスを構成する。それぞれのコントロールポイントは、0 から 2 つのハンドラを持ち、これが隣接するセグメントのカーブを決定する。(Gimp は複数のパスを扱うことができる。)

パスツールの呼び出し

パスツールを素早く呼び出すには、お絵描き中の Window をアクティブにした状態で、b を押す。(そうでなければ、ツールボックスにあるパスのアイコンをクリックするか、カスケードメニューのツールから引き下ろす。)

パスツールのモード切り替え

パスツールを使うときは、3 つのモードを使い分ける。デザインモード、編集モード、移動モードである。

デザインモードにあるなら、コントロールキーを押している間は編集モードになり、コントロールキーと Alt キーを同時に押している間は移動モードになる。(そうでなければ、ツールボックスにあるパスのアイコンをダブルクリックすると、モードを切りかえるメニューが出るので、これで切り替える。)

パス作成(デザインモード)

新たなコントロールポイントを作成したままドラッグすると、ハンドラが出現しセグメントがカーブする。このとき、二つのハンドラは、一直線上に並び、長さが等しく保たれる。

パスを閉じるには、デザインモードで、Ctrl を押しながら、最初のコントロールポイントをクリックする。このとき、直前のコントロールポイントがハンドラを持てば、このコントロールポイントにも自動的にハンドラが加えられ、カーブとして接続される。

このやり方は、一般に別のコンポーネントの端点同士を接続するのに用いることができる。

曲がり具合の変更(デザインモード)

すでに作成したセグメントをドラッグすると、セグメントがカーブする。このとき、セグメント両端のコントロールポイントが持つ四つのハンドラのうち、ドラッグしている側にある二つのハンドラだけが動く。シフトキーを押しながら同じことをすれば、それぞれのコントロールポイントにある二つずつのハンドラは一直線上に並び対称に動く。

すでに作成したコントロールポイントをクリックしてハンドラを表示させれば、それぞれのハンドラを独立して動かすことができる。もし、二つのハンドラを一直線上に並べて対称的に動かしたいならば、シフトキーを押しながら行う。

ハンドラがコントロールポイントを中心として対称になるようにする(つまり、二本のハンドラが一直線上にならび、その長さが等しい)には、デザインモードでコントロールポイントをクリックして、ハンドラを表示されている状態にしておいてから、シフトを押しながら一方のハンドラをクリックし、わずかにドラッグさせればよい。

編集モード

あらたなコントロールポイントを加えるには、編集モードで、セグメントをクリックする。

コントロールポイントを削除するには、編集モードで、シフトキーを押しながら、消したいコントロールポイントをクリックする。

セグメントを削除するには、編集モードで、シフトキーを押しながら、消したいセグメントをクリックする。

折れ線で描く(デザインモード)

多角形オプション(ツールボックスにあるパスツールのアイコンをダブルクリックしてツールオプションのダイアログボックスを出すと、チェックボックスがある)を選択すると、新たなコントロールポイントは、ハンドラを持たず、セグメントは折れ線で接続される。いったん、作成したコントロールポイントの操作には、何ら影響がない。

同じパスの中に新たなコンポーネントを作成するためには、シフトキーを押しながら画面上をクリックして、新しいコントロールポイントを作成すればよい。また、これまで描いていたコンポーネント中の端点でないコントロールポイントをクリックするか、前のコンポーネントを閉じた曲線(多角形)にするすると、次に作成されるコントロールポイントは、次のコンポーネントに属するようになる。(最後に選択されたコントロールポイントは、白丸で表示される。)セグメントを切断して、コンポーネントを二つに分けることもできる。

ハンドルを削除するには、エディットモードにおいて、Shift と Ctrl を同時に押しうながら、当該ハンドルをクリックする、とマニュアルにはある。しかし、デザインモードにおいても、同様のことが可能のようだ。これにより、あるノードを介してすべらかに接続された曲線を、折れ線に変えることが可能になる。

移動モード

移動モードでは、一つのコンポーネントだけを移動させることができる。移動モード中に、シフトを押せば、そのパスに属するすべてのコンポーネントを同時に移動させることができる。

パスに対してドロー的操作を加える

コンポーネントは、右回り左回りを区別しない。コンポーネントは、自分自身や、他のコンポーネントと交差することが許される。これは、Gimp が右回わりと左回わりを区別する表現方法を持たないというだけであって、「パスのエクスポート」を使ってパスを svg ファイルに書き出し、たとえば Inkscape などの右回わりと左回わりを区別するアプリケーションで読み込んでみると、右回わり左回わりが意味を持っていることがわかる。

パスの右回り左回りを変更する手段は用意されていない。セグメントの一部を切断して、変更したい回転方向でふたたびノードを接続するというのがひとつの手。

パスを選択領域に、あるいは、選択領域をパスに変えることができる。

選択領域に変えることができるのは、パスであり、コンポーネントではない。

パスをストローク描画することができる。

パスを直接塗り潰すことはできないので、いったん選択領域に変えてから、フィルする。

パスの管理

パスツールでパスを作成したあと、別のツールを選択すると、作成したパスは見えなくなるが、これは破棄されたわけではない。「ダイアログ」のカスケードメニューから、「パス」を選択するとこれが確認できる。

パスダイアログでは、パスの複製、削除、可視化・不可視化などができる。

パスを可視にすれば、パス・ツールでコントロールポイントや、セグメント、パス全体などを選択できるようになるので、デザインモードや編集モード、あるいは移動モードを用いて編集を続行できるようになる。

パスダイアログで、以前に作成したパスを選択すると、そのパスに対して続けて作業をすることができる。

パスダイアログで、二つ以上のパスを可視にすれば、パスダイアログ上右クリックで出たメニューの「可視パスの統合」によって、一つのパスに合併することができる。(その結果できたパスには、少なくとも二つのコンポーネントができることになる)

パスの保存と別アプリでの読み込み

gimp の標準フォーマットである xcf ファイルで保存すれば、作業中のパスもすべてそのまま保持される。

パスだけをエクスポートすることもできる。パスダイアログを表示し、パスダイアログ上で右クリックをし、パスのエクスポートを選ぶと、svg フォーマットで保存することができる(拡張子は自動的にはつかないが)。svg は、xml に準拠したフォーマットで、汎用性が大きく、Inkscape などのドローアプリケーションで読み込むことができる。Adobe Illustrator でも読み込めるそうである。

SVG ファイルの読み込み

SVG ファイルのベクターデータを Gimp で読み込むと、自動的にラスタライズされる。このとき、ダイアログボックスが出て、同時にパスとしても読み込むというオプションを選択できる。

チャンネル

参考 http://docs.gimp.org/en/gimp-channel-dialog.html

用語

Gimp を使っていて最も混乱するのがチャンネルという用語の使い方である。Gimp の公式ドキュメントでも、呼び方が変化しているようである。

チャンネル
 │                                       
 ├─カラー・チャンネル                             
 │  │                                    
 │  ├─プライマリ・チャンネル──────────────────────┐ 
 │  │  │                               │ 
 │  │  ├─[RGBカラー]────┬─レッド・チャンネル       │ チ
 │  │  │             ├─グリーン・チャンネル      │ ャ
 │  │  │             └─ブルー・チャンネル       ├─ン
 │  │  │                               │ ネ
 │  │  └─[インデックス・カラー]──インデックスド・チャンネル   │ ル
 │  │                                  │
 │  └─アルファ・チャンネル(狭義)──┐                │
 │                    ├─アルファ・チャンネル(広義)─┘
 └─セレクション・マスク─────────┘

※レイヤーマスクはアルファ・チャンネルに近いが、きちんと図に表しにくい。

カラー印刷をやるときに「版」を何枚か使うが、その「版」一枚一枚のような構造を持ったものを、チャンネルと呼ぶ。ただし、印刷物の場合は減色混合なので、三原色のインクを載せると(理想的には)黒になるが、コンピュータの上では加色混合なので、赤緑青のすべての色をのせると白になるという違いがある。

RGBカラーを採用する場合の赤版、緑版、青版はすべて独立したチャンネルである(レッド・チャンネル、グリーン・チャンネル、ブルー・チャンネル)。インデックス・カラーを採用する場合は、赤版、緑版、青版の三枚を使うかわりに、さまざまな絵の具を一つの版木の上に載せた「版」を一枚だけ用いるのだが、この「版」をインデックスド・チャンネルとよぶ。RGBの 3 つの版と、インデックスド・チャンネルは、欠くべからざるチャンネルであり、あわせてプライマリ・チャンネルと呼ばれる。

また、現実世界にちょっと類似したものを見つけることができない透明度に関する「版」がある。これは、RBGカラー、インデックス・カラーいずれを採用した場合にもオプションとして加えることができ、アルファ・チャンネル(狭義)と呼ばれる。

プライマリ・チャンネルとアルファ・チャンネル(狭義)をあわせて、カラー・チャンネルと呼ぶ。カラー・チャンネルの内容はそのまま画像の見え方に影響する。

「版」構造をなしてはいるが、画像の見え方に影響を及ぼさないものが Gimp にはある。これは、選択領域を保存するのに用いられ、セレクション・マスクと呼ばれる。新しい Gimp にはクイック・マスクというものが登場したが、これはセレクション・マスクのうち特殊なものである。

Gimp の新しいマニュアルによる定義は、上記のようであるが、Gimp にいうアルファ・チャンネル(狭義)と、セレクション・マスクを併せて、アルファ・チャンネル(広義)と呼ぶ場合があるので注意が必要だ。(Gimp の公式ドキュメントでも以前はセレクション・マスクのことをアルファ・マスク・チャンネルと言っていたようだ)。

以後たんにアルファ・チャンネルといったら、狭義のそれをさすことにする。

(注意)Microsoft の Internet Explorer はバージョンが 7 より前だと png のアルファチャンネルが使えない(らしい)。

「アルファ・チャンネル=透明な敷物」説の検討

「アルファ・チャンネルとは、RGBの層の下に敷いてある敷物のようなものだ」と私は長い間、誤解していた。アルファ・チャンネルを付加しておくと、「消しゴム」の通過した後が透明になるからそう考えたのだと思う。(アルファ・チャンネルがある場合とない場合で、消しゴムのやっていることがずいぶん違うということなど、思い至らなかったのだ)。

少し考えてみれば、敷物説はおかしいということがわかる。私は「透明な敷物の上ならば、赤も緑も青も載せなければ透明なまま」と考えていたが、もしそうならば黒が実現できないのである。黒は赤も緑も青も載せていない場合の色なのに、それが透明に見えてしまうのだから。

アルファ・チャンネルの正体

RGBのプライマリ・チャンネルである赤緑青の各チャンネルは加色混合される。模式的にそれぞれ0から1までの値をとると考えると、赤1+青0+緑0で、生の赤色が表現され、赤0+緑0+青0で黒、赤1+緑1+青1で白が表現される。これは、直感的に理解しやすいことだ。しかし、アルファ・チャンネルを加えた場合、我々の直観からいくらか離れたことになる。

アルファ・チャンネルには、「見えるようにするインク」のようなもの――以下「見え」インクとしようか――が載っていると考えることができる。「(赤1+青0+緑0)×見え1」で生の赤が表現され、「(赤1+青0+緑0)×見え0.5」で画像の下がすけて見える赤が表現される。「(赤1+青0+緑0)×見え0」で、完全に下が透けて見える。もはや赤くもなんともないただの透明だ。もちろん、これは喩えであって、アルファ・チャンネルの「見え」インクがRGBすべてのチャンネルに対して働くということを模式的に示しているに過ぎない。

また、「(赤0+青0+緑0)」は黒であるから、「(赤0+青0+緑0)×見え1」は下がまったく見えない黒。「(赤1+青1+緑1)」は白であるから、「(赤1+青1+緑1)×見え1」は下がまったく見えない白。一般的に「(赤a+緑b+青c)×見え0」では、a,b,cが何であろうと、下が完全にすけて見えるようになる。この「見え」の量をアルファ値と呼び、0に近いほど下がよく透けて見える。

アルファ・チャンネルの働きを観察してみる

「チャンネル・ダイアログ」で各チャンネルの状態を監視しながら簡単なお絵描きをすると、アルファ・チャンネルの有無で動作にずいぶん違いがあるということがわかる。

まず、アルファ・チャンネルを設けないRGB画像(背景白)にお絵描きする様子を観察する。
初期状態の地色は白である。
生の赤インクをつけた筆は、緑チャンネルから緑を、青チャンネルから青をそぎ取る。すでに赤がべったりと載っている赤チャンネルには何ら変更を及ぼさない。
生の緑インクをつけた筆は、赤チャンネルから緑を、青チャンネルから青をそぎ取る。すでに緑がべったりと載っている緑チャンネルには何ら変更を及ぼさない。
生の青インクをつけた筆は、赤チャンネルから赤を、緑チャンネルから緑をそぎ取る。すでに青がべったりと載っている青チャンネルには何ら変更を及ぼさない。
生の青インクをつけた筆は、緑チャンネルから緑を、青チャンネルから青をそぎ取る。
消しゴムは、赤チャンネルに削られた赤を補い、緑チャンネルに削られた緑を補い、青チャンネルに削られた青をおぎなう。

アルファ・チャンネルを設けた画像にお絵描きする様子を観察してみる。
初期状態の地の色は黒であり、アルファ・チャンネルには「見え」が載っていないため、全面が透明に見えている。
生の赤インクをつけた筆は、赤チャンネルに赤、アルファ・チャンネルに「見え」をのせ、緑、青の各チャンネルに緑、青が載っているなら、それぞれから緑、青をそぎ取る。
生の緑インクをつけた筆は、緑チャンネルに緑、アルファ・チャンネルに「見え」をのせ、赤、青の各チャンネルに赤、青が載っているなら、それぞれから赤、青をそぎ取る。
生の青インクをつけた筆は、青チャンネルに青、アルファ・チャンネルに「見え」をのせ、緑、赤の各チャンネルに緑、赤が載っているなら、それぞれから緑、赤をそぎ取る。
消しゴムは、アルファ・チャンネルから「見え」をそぎ取りるが、赤緑青の各チャンネルには影響を及ぼさない。
逆消しゴム(消しゴムのオプション)は、アルファ・チャンネルに「見え」をのせるが、赤緑青の各チャンネルには影響を及ぼさない。

アルファ・チャンネルに「見え」だけを塗る方法

方法1 「逆消しゴム」は常にアルファ・チャンネルに「見え」を塗り、それ以外のチャンネルに影響を及ぼさない。

方法2 チャンネル・ダイアログで、それぞれのカラー・チャンネルについて選択・非選択の状態を選ぶことができる。画面上での色塗り動作は、ここで選択されているチャンネルに対してのみ効果をあらわす。これを利用する。(このやり方は、多分に裏技的であり、ほとんどの人はレイヤーマスクを使うことを好むだろうが、やってみると勉強にはなる)
「見え」をアルファ・チャンネルの全面/部分に塗ろうと思ったならば、チャンネル・ダイアログからアルファ・チャンネルだけを選択したうえで、画面上で選択領域をし、そこを何らかの色で塗りつぶせばよい。塗られる色は問題にならない。

後述する(予定の)セレクション・マスクや、パスを使えば、微妙な選択領域を実現できるので、併せて使うと効果的。

ペーストの動作は、残念ながら期待通りにならない。画像をペーストすると、チャンネル・ダイアログでどのチャンネルが選択状態になっていようとも、すべてのチャンネルに効果が及んでしまう。(そのうえ、塗られる「見え」も、ペーストされる画像の濃淡とは関係なく、一様にべったりしたものだ。)ペーストの効果をアルファ・チャンネルだけにとどめ(て、あわせてペースト画像の濃淡で「見え」の量をコントロールし)たい場合は、レイヤーマスクを利用することになる。

アルファ・チャンネルから「見え」だけを削除する方法

方法1 「消しゴム」は常にアルファ・チャンネルから「見え」をはぎとり、それ以外のチャンネルに影響を及ぼさない。

方法2 単純に選択領域の「切り取り」を実施すると、アルファ・チャンネル上の「見え」がはぎ取られる。「切取り」は、塗りの場合と違い、チャンネル・ダイアログでどのチャンネルが選択状態にあるかと関係なく常にアルファ・チャンネルにしか効果を与えない。

チャンネル・ダイアログでアルファ・チャンネルだけを選択したうえで、「黒」の描画をすると、その部分でアルファチャンネル上の「見え」が削除されると期待してしまうが、これは勘違いだ。黒の描画というのは、RGB各チャンネルの色を削ぎとり、アルファ・チャンネルのその部分に「見え」をのせるものであるから、ここでの利用において「白」で塗るのとかわりはない。(レイヤーマスクにおける黒の描画はこれとは全く異なる)

アルファ・チャンネルを自在に編集する方法

アルファ・チャンネルが、赤緑青の版のようなものだとしたら、筆や鉛筆での描画の濃い薄いによって「見え」インクの量をコントロールするような編集方法を行いたくなるのが人情といふもの。これを行うためには、後述のレイヤー・マスクというものを利用する。

アルファ・チャンネルの応用例

アルファ・チャンネルを利用する例として、写真の周辺部を透明化することを考える。

この写真周辺部は透明である。この頁のバックグラウンドとたまたま色が同じだったというわけではない。(ほらね)。ただし、Internet Explorerだと、7 より前のバージョンではうまく表示されない(そうである)。いろいろまじない(漢字で「まじない」と書くと「呪い」になり、呪われそうだぜ)があるらしいが……

アルファ・チャンネルに載せられた「見え」が目的の図形の上にだけ塗られるようにすればよい。このとき、RBG各チャンネルは何ら変更する必要がない。

まず、写真を読み込んで「レイヤー」→「透明部分」→「アルファチャンネルを追加」。次に見えるようにしておきたい部分を選択し、「選択」メニューから(選択部分の)「反転」を行ったうえで、「選択」メニューから「切取り」(あるいはコントロールX)を行う。アルファ・チャンネルがある場合の削除は、もとの画像のアルファ・チャンネル上の「見え」を削ぎ取るにすぎないから、これは期待した結果をもたらす。もし、周囲をぼかしたいのならば、領域選択をしたあとで、「選択」メニューから「境界をぼかす」を実行しておけばよい。

(たぶん、レイヤーマスクの使い方を学ぶと、レイヤーマスクで同じことがもっと簡単に実現できることに気づくであろう。)

余談であるが、このようにして作成された png ファイルには、RBG各レイヤーにもとの画像が残っているので、Gimp で読み込んだうえでアルファ・チャンネルの全面にわたり「見え」を塗ってやると、透明に見えていた場所に画像が現れる。

また同様の理由から、透明化されている部分でRGBチャンネルの内容を黒一色にしておくとファイルサイズが小さくなる。上の牛写真で試したところ 4 割ほどサイズが小さくなった。

png のアルファチャンネルは、Internet Explorer 7 より前ではうまく表示されない。完全に見えるか、完全に見えないかのどちらかでよい場合には、保存するときに、インデックスカラーにしておくと Internet Explorer 6 でも透明化ができる。これは、gif の透明化の仕組みと同じもののようだ。

アルファ・チャンネルとレイヤー

RGBカラーで描画するときに複数のレイヤーを設けると、それぞれのレイヤーが自分用の赤チャンネル、緑チャンネル、青チャンネルを持つ。そして、各レイヤーごとに一つずつのアルファ・チャンネルを持つことができる。チャンネル・ダイアログでこれを確認するためには、それぞれのレイヤーの可視/不可視を切り替えてやればよい。

ただし、これをたとえば png 形式で保存したような場合、赤緑青の各チャンネルとアルファ・チャンネルは、それぞれ一つずつにまとめられて保存される。

あるレイヤーを選択し、そのレイヤーにある一つのチャンネルだけを選択するというようなことが可能で、そうすれば、あるレイヤーのあるチャンネルだけを編集することができる。

レイヤーを二つ以上作る人は、たいがいの場合、あるレイヤーがより下に位置する別のレイヤーを完全に隠してしまいたいとは思わないだろう。そこで、Gimp は気を利かせて、追加してレイヤーを作る場合、これにアルファ・チャンネルを付加する。

レイヤー・ダイアログには、「不透明度」というスライド・スイッチがついている。不透明度を下げると、アルファ・チャンネルに載っている「見え」が全体的に薄くなる。不透明度が 0 の部分には影響がない。デフォルトでは不透明度100パーセント。

レイヤー・ダイアログには、「透明度の保護」というオプションがある。これは、選択領域を色で塗りつぶすような場合に、アルファ・チャンネルに影響が及ばないようにするものである。なお、たとえ「透明度の保護」がONになっていても、消しゴム・ツールの動作には変化がない。

レイヤー・マスク

レイヤー・マスクというものがある。レイヤー・ダイアログで、当該レイヤーのところを右クリックして「レイヤーマスクの追加」。これを行うと選択ダイアログが出てくる。当該レイヤーにアルファ・チャンネルが作成されていることが前提である。

レイヤー・マスクを作成するとき、6 つの初期化方法のいずれかの選択を求められる。「白」「黒」「レイヤーのアルファチャンネル」「レイヤーのアルファチャンネル」「選択」「レイヤーのグレースケールのコピー」がある。この初期化方法の違いによって、レイヤー・マスクの働き方は異る。

ちょっと注意。「レイヤーのアルファチャンネル」を 2 回書いたが、私の環境でこれは同じ名前のものが二つあるのだ。困ったことだ。ただ、ショート・カットが異なっていり、働き方も全く異なる。英語版では、一つ目のほうが「Layer's Alpha Channel」ふたつ目のほうが「Transfer Layer's Alpha Channel」となっていて区別がつく(新しい Gimp では、後者は「レイヤーのアルファ・チャンネルの転移」となっている)。以下、一つ目を「レイヤーのアルファチャンネル(A)」「レイヤーのアルファチャンネル(T)」と区別することにしやう。

レイヤー・マスクが作成されると、それが作成されたレイヤーで、レイヤーダイアログのサムネイルが二つになり、左側にあるのが以前からあったレイヤーのサムネイルで、右側に新しくできたものがレイヤー・マスクのサムネイルである。この二つのサムネイルは、ポインタで選択することができ、描画ツールは選択されているほう(レイヤーまたはレイヤーマスク)に対して働く。

さて、レイヤーマスクは、レイヤーに加えられたもう一つアルファ・チャンネルのようなものである。以下、アルファ・チャンネルというときは、従前から使っている意味のアルファ・チャンネル(狭義)をさし、レイヤーマスクはたんにレイヤーマスクと記す。(この二つを混同せぬやう)。レイヤーはもともとアルファ・チャンネルをもっているのだから、それにレイヤーマスクを加えると、透明度を扱う(私は、その逆に「見え」を扱うという表現を好む)「版」が二つ存在することになる。

ふつう、RGB各チャンネル&アルファ・チャンネルがあるとき、「(赤1+緑0+青0)×見え1」で生の赤になると述べた(この模式的な表現についてはと同じ意味にとらえられたし)。「見え1」が盛られたレイヤー・マスクをこのレイヤーに重ねると、「[(赤1+緑0+青0)×見え1]×見え1=赤1」となり、やはり生の赤だ。「見え0」が盛られたレイヤー・マスクを重ねると、「[(赤1+緑0+青0)×見え1]×見え0=0」で、透明だ。一方、「(赤1+緑0+青0)×見え0」のレイヤーに「見え1」が盛られたレイヤーマスクを加えても、「[(赤1+緑0+青0)×見え0]×見え1=0」で、透明である。

レイヤーマスクに盛られた「見え」を編集するためには、筆や鉛筆などの描画ツールが使える。白で塗ると、「見え」が盛られ、黒で塗ると「見え」が削ぎとられる。もちろん、白と黒の中間で塗れば、効果もその中間だ。

よく利用されるのが、レイヤーマスクに対するペーストである。レイヤーマスクに、画像をペーストし固定すると、その画像をグレイスケールに変換したうえで、まっ白の部分で100パーセント真っ黒の部分で0パーセントの「見え」がレイヤーマスクに塗られる(ペースト時に、レイヤー・ダイアログ上でレイヤーでなくレイヤーマスクが選択されている必要がある)。チャンネル・ダイアログで、アルファ・チャンネルだけを選択しておいて、ペーストを行ってもRGB各チャンネルに影響が及んでしまう(し、「見え」も一様にべったりと塗られる)のとは異なるのである。

6 つの初期化選択肢は、レイヤー・マスクを追加するにあたり、最初にどのような「見え」を盛っておくかをコントロールする。「白」というのは、「見え」が全面に塗られたレイヤー・マスクを追加し、「黒」なら「見え」がまったく塗られていないレイヤー・マスクを追加する。「選択」というのは、そのときの選択領域の形に「見え」を塗ったレイヤーマスクを追加する。「レイヤーのグレースケールのコピー」というのは、レイヤーをグレイスケールにしたとき完全に白い部分にはいちばん厚い「見え」が塗られているようなレイヤーマスクを追加する。「レイヤーのアルファチャンネル(A)」は、アルファチャンネルの内容と同じように「見え」が盛られたレイヤー・マスクを作成する。

これらのレイヤーマスクを作成しても、編集しても、もともとあったアルファ・チャンネルには影響がない。レイヤーマスクを削除すれば、レイヤーマスクを作成する以前の状態に戻る。(ただし、チャンネル・ダイアログでアルファ・チャンネルのサムネイルを見ると、そこにはレイヤーマスクの効果も折込まれているので、レイヤーマスクが作成されているときは、オリジナルのアルファ・チャンネルの状態を知ることができない。そして、レイヤーマスクを削除してみてはじめて、もともとあったアルファ・チャンネルが残されているということがわかる)。

特別なのは、「レイヤーのアルファチャンネル(T)」である。これは「レイヤーのアルファチャンネル(A)」と同じであるが、レイヤーマスクが作成されるときにアルファ・チャンネルの内容を「見え」を全面に塗ったものに変えてしまう点が異なる。その結果、まるでアルファ・チャンネルそのものを編集しているかのような気分になる。「レイヤーのアルファチャンネル(T)」で作成したレイヤーマスクを削除すると、アルファ・チャンネルの内容は従前と異なってしまう。

「レイヤーマスクの適用」を行うと、レイヤーマスクは、アルファ・チャンネルに統合される。

レイヤーマスクの利用

レイヤーマスクは、アルファ・チャンネルを編集する手段として用いることができる。端的には、「レイヤーのアルファチャンネル(T)」でレイヤーマスクを作成し、レイヤーマスク編集後に「レイヤーマスクの適用」を行えばよい。

チャンネル・ダイアログで、アルファ・チャンネルだけを選択しておくと、筆などのツールや色のフィルの効果の及ぶ範囲をアルファ・チャンネルだけに限定できるので、これを利用してある程度のアルファ・チャンネルの編集が行えるが、レイヤーマスクを利用したほうが、ずっとできることが多い。

選択領域とマスク

セレクション・マスクや、その特殊な形であるクイック・マスクというのは、広義のチャンネルにはいる。そのへんの用語については、前述したる如し。レイヤーマスクについては、別項

選択領域とは

グレイスケールの画像で、選択領域を切り取った場合のイメージ。もっとも単純なものは、以下のようなものだ。図は、インクの載った版の断面である。ここでは選択は、たんにピクセルの集合体と考えることができる。

図1

 ■■■■■      ■■■      ■   ■
 ■■■■■  ─   ■■■   =  ■   ■
 ■■■■■      ■■■      ■   ■
───────   ───────   ───────
元の画像       選択領域     切取り後の画像

一色に塗りつぶされた面から楕円選択どで選択領域を削除し、削除された部分にもとの色をバケツ・ツールを使って塗ってみると、もとの通りにはならない。

これは、Gimp は選択領域というものが、たんなるピクセルの集合体ではなく、それぞれのピクセルが「深さ」の情報を持ったものだからである。以下が、そのイメージ。

図2

 ■■■■■      ■■■      ■   ■
 ■■■■■  ─   ■■    =  ■  ■■
 ■■■■■       ■       ■■ ■■
───────   ───────   ───────
元の画像       選択領域     切取り後の画像

ところで、一色べったりの場所から選択領域切取りを行い、その後に、その色をバケツを使ってフィルしても、もとの通りに復旧させることができない。

次のように考えることができる。

図3

 ■■■■■      ■■■         ■       ■ ■ ■
 ■■■■■  ─   ■■■   +     ■    =  ■ ■ ■
 ■■■■■       ■          ■       ■■■■■
───────   ───────    ───────   ───────
元の画像      選択領域切取     バケツでフィル   切取り後の画像

楕円選択などの領域選択ツールは、デフォルトではその周辺で、選択の「深さ」が浅くなっているのである。これは、斜めの表現を自然に行うためである。フィルされる範囲は「完全に」切りとられた部分であるから、浅く切りとられた部分はフィルされずに残ってしまうのである。ツールのオプションで、「アンチエイリアシング」をオフにしておけば、このようなことは起こらない。

ここに至って、選択領域というのは、境界だけによって表現できるピクセルの集合体ではなく、各ピクセルが深さをもっているもので、これは赤版、緑版、青版などのカラーチャンネルと似た構造を持ったものであると考えることができる。

選択領域の表現方法

楕円形選択、投げ輪選択などのツールで領域選択をすると、メインの画像上に点線で囲まれた領域が表示される。こうした表現方法は、選択領域というものが常に領域外と領域内の二種類しか問題にしないようなもの(つまり図1のようなもの)であるという誤解を与える。

だが、実際は、選択領域とは、領域内の各ピクセルがそれぞれに深さを持ったもの(図2)であるから、選択領域というもの自身をグレイスケールの「版」として表現したほうが、正確である。

選択領域の保存

選択領域が「版」構造をしたものであることを考えれば、これを保存するのにチャンネルが使われることが納得できる。そして、そのチャンネルをまるでグレイスケールの画像のように編集することができれば、便利だということに気付く。Gimp では、こうした選択領域の保存・編集に用いられるチャンネルを、セレクション・マスクと呼んでいる。

セレクション・マスク

すでに選択されている領域をセレクション・マスクに取り込むことができるし、セレクション・マスクとして作成したものを選択領域として吐き出すこともできる。また、まったくまっさらなセレクション・マスクを作成して編集することもできる。

チャンネル・ダイアログから新しいチャンネルを作成すると、セレクション・マスクが作られる。チャンネル・ダイアログで、セレクション・マスクがハイライトされている(選択されている)とき、筆やペンによる描画はすべてセレクション・マスクに対して行われる。

作成されたばかりの真っ新なセレクションマスクが選択されているとき(チャンネルダイアログからこれをコントロールできる)、はじめメインの画面には薄いグレイがかかっている。このグレイは、出力のとき描画されないもので、たんに編集の便宜のためにそうなっているのである。このグレイの部分に筆やブラシなどを自由に使って形を描くことによって、セレクション・マスクに書き込むことができる。このとき、白に近い色で描いた部分は、マスクのグレイが薄くなり、下の画像が明るく見えるようになる。こうした部分は、マスクを選択領域に変換したときに「深く」選択される。ぎゃくに、セレクション・マスク上に黒に近い色で描いた部分は、マスクのグレイがかすかに薄くなるだけで、こうした部分は、マスクを選択領域に変換したときに「浅く」選択される。セレクション・マスク上で領域選択をして切取ると、そのマスクが選択領域に変換されたとき当該部分が深く選択される。

クイック・マスク

クイック・マスクは、セレクション・マスクの特殊なものに過ぎない。クイック・マスクをONにすると、Qmask という名前のセレクション・マスクが作成され、そのマスクが選択状態になる。一般のセレクション・マスクが、画像にグレイの面をかぶせて表現されていたのに対して、こちらは赤っぽい面をかぶせて表現される。この状態で、筆や鉛筆を使うとき、それは一般のセレクションマスクの場合と同じである。クイック・マスクをOFFにすると、クイック・マスクの内容は、選択領域となって吐き出される。

複雑な選択領域の活用

セレクション・マスク(含クイック・マスク)の有効な活用方法のひとつは、複雑な選択領域の作成・編集・保存である。ここで複雑というのは、選択領域の輪郭が複雑であることのみならず、選択領域の各部が異なった深さを持っているということも指す。

これは、牛の写真からクイック・マスクを利用して選択領域を作成し、それによってレンガの写真を切り取ったもの。しかし、これだけでは、あまり牛に見えない。

これは、先程作成した選択領域でもとの牛の写真を切取り、そのカラー・チャンネルを選択領域に変換し、それを用いてレンガの写真を切り取ったもの。

(同じことを、アルファ・チャンネルとかレイヤー・マスクを使って実現することが可能だろう)

おまけ

jpeg ファイルをポストスクリプトプリンタで印刷

jpg 画像をポストスクリプト・プリンタで出力するとき、Image Magic の convert を使って Postscript ファイルにするよりも、Gimp で読み込んで印刷したほうが速い。Postscript は、jpeg 画像の扱い方を知っているが、Image Magic はそれを考慮しないからである。一方、Gimp はこれを考慮するのでプリンタに送られるデータ量が減るのである。

――目次――
HOME雑文写真壁紙馬鹿読書語学
│├英語
│└日本語電算地理
│└白地図ブログ