2016年3月16日水曜日

GIMP Script-Fu (10) レイヤーグループを扱う (生成)

Script-Fu で レイヤーグループを扱う 検索をして見ても、 取得 ばかりが目立ちます。
通常の 画像からレイヤーを取得すると、 グループに格納されたレイヤー群は隠蔽されて見えないから、でしょうね。
でも、レイヤーグループは便利です。
是非、 Script-Fu を書く上でも、積極的に使いたい機能 なのではないでしょうか。


レイヤー群をひとまとめにして扱う レイヤーグループの機能 が GIMP 2.8 になって採用されました。
冒頭に書いた様に、 レイヤーを扱う上で、 グループに格納されたレイヤー群は隠蔽されて見えない点が 興味の中心に見えます。
実際に、 Script-Fu でレイヤーグループを新たに作る例は、あまり、見付かりません。  検索が下手だからか ... ?。.


無いなら 作っちゃえ! の精神で ... 。


先ず、4枚のレイヤーからなる 画像 を用意しましょうか。
このうち、上に載る3枚を 新たに設けた レイヤーグループに収めるものとします。
これを、 GIMP 2.8 のメニュー項目から操作する方法は、 ここでは、説明を省きます。  ご存知と仮定します。.




では、 コンソール を使って見て行きましょう!。
             現実的に、Script-Fu を書くには、この流れを 変数 に置き換える作業が必要です。
             コンソールで実行して得られる数値を 変数として 取り込まなければならないからですね。
             でも、ここでは、触れない事にします。

画像 ID が 6 、各レイヤーの ID が夫々 下から 12 13 14 15  となっているものとします。  上図で背景が ID 12。.

新たにレイヤーグループを作るのは (gimp-layer-group-new image) ですね。
最上層に作るので add の引数は -1 です。
レイヤー ID を数値で取得したいので 次の様にします。
> (define img 6)
img
> (car (gimp-layer-group-new img))
16
> (gimp-image-add-layer img 16 -1)
(#t)

このままでは、モニターにはレイヤーグループは追加されません。
表示したければ、これ ですね。
> (gimp-displays-flush)
(#t)

次に、 既存のレイヤーをグループ内に格納します。
(gimp-image-reorder-item image item parent position) です。
item が対象レイヤーの ID で、 parent が収めるグループのレイヤー ID です。
position で位置指定出来ますが、最上層に加えるなら ここでも -1 です。
> (gimp-image-reorder-item img 13 16 -1)
(#t)
> (gimp-image-reorder-item img 14 16 -1)
(#t)
> (gimp-image-reorder-item img 15 16 -1)
(#t)
レイヤーそのものは、 フラットな形でも グループに格納しても、 レイヤー番号は変わりません。  *1.
最初に画像に加えられた時の ID を そのまま 保持しています。  *1.
Script-Fu 上で グループに格納したレイヤーは、事前にその番号が分かっているなら、いきなり その番号でアクセス出来ます。  *1.
一々、取得し直す必要は無い 訳ですね。  *1.



 因みに、各レイヤー情報を取得して見ましょう。  よくある 取得 の例ですね。 *1.
> (gimp-image-get-layers img)
(2 #(16 12))
> (gimp-image-get-item-position img 16)
(0)
> (gimp-image-get-item-position img 15)
(0)
> (gimp-image-get-item-position img 13)
(2)
> (gimp-image-get-item-position img 12)
(1)
> (gimp-item-get-children 16)
(3 #(15 14 13))
> (gimp-item-is-group 16)
(1)                                              ; Notice: 1=TRUE 0=FALSE
> (gimp-item-get-children 12)
Error: (<unknown> : 45562772) Procedure execution of gimp-item-get-children failed



まぁ、実際に、Script-Fu で、レイヤーグループを作るには、レイヤーそのものを 追加編集するでしょうから、
その部分の知識が更に必要となりますが、
その辺りは、既存のサイトやページが沢山ありますので、 ここでそれを書くのは止めます。


レイヤーグループの生成は、
ここで示した流れを Script-Fu の関数として定義すれば良い事になります。

最初からグループ内にレイヤーを生成してから操作する方法もあると思いますが、
先に、フラットな形でレイヤー操作してしまい、 後からグループに収める方が、分かり易い気がしています。
勿論、最初に入れ物のグループレイヤーを生成して、フラットなレイヤーを追加操作し、最後に収めるのでも OK ですね。。 .



[2016/03/16] 誤字訂正
[2016/03/16] 追補  *1.

0 件のコメント:

コメントを投稿