mieki256's diary



2012/08/04() [n年前の日記]

#2 [gimp][cg_tools] GIMP 2.8.0のレイヤーグループについて少し調べてる

Script-fu からどうやって操作したらいいのかな、と。

例えば、下のようなレイヤー構造があったとする。
┬─ レイヤーグループ ┐
│                    ├─ L4 (テキストレイヤー)
│                    ├─ レイヤー#2 (通常レイヤー)
│                    └─ レイヤー#1 (通常レイヤー)
├─ レイヤー (通常レイヤー)
└─ 背景
Script-fuコンソールで少し試してみた。
> (gimp-version)
("2.8.0")

;; ----------------------------------------
;; 画像の管理番号を定義

> (define image 1)
image

;; ----------------------------------------
;; レイヤーの個数と、レイヤーIDのリスト?を取得する。

> (gimp-image-get-layers image)
(3 #(4 3 2))

;; レイヤー個数が「3」になっている。本当は5枚あるはずなのに…。
;; つまり、レイヤーグループは1枚のレイヤーとしてカウントされていて、
;; レイヤーグループ内のレイヤーは無視(?)される。

;; ----------------------------------------
;; レイヤーIDのリスト(?)だけを取り出し

> (define layer-array (cadr (gimp-image-get-layers image)))
layer-array

;; ----------------------------------------
;; 1番上、2番目、3番目のレイヤーIDを取り出し

> (aref layer-array 0)
4
> (aref layer-array 1)
3
> (aref layer-array 2)
2

;; ----------------------------------------
;; レイヤー1番目、2番目、3番目が、レイヤーグループかどうかを調べる

> (gimp-item-is-group (aref layer-array 0))
(1)
> (gimp-item-is-group (aref layer-array 1))
(0)
> (gimp-item-is-group (aref layer-array 2))
(0)

;; レイヤーグループなら (1) が、通常のレイヤーなら (0) が返ってくるらしい。
;; …その、(1) とか (0) って、どうやって条件分岐で判定すればいいのやら。
;; どうして #t や #f で教えてくれないのだろう…。

;; ----------------------------------------
;; レイヤー1番目、2番目、3番目のIDを別変数?に定義

> (define l0 (aref layer-array 0))
l0
> (define l1 (aref layer-array 1))
l1
> (define l2 (aref layer-array 2))
l2

;; ----------------------------------------
;; レイヤー1番目、2番目、3番目に子供がいたら、その子供の情報を取得

> (gimp-item-get-children l0)
(3 #(7 6 5))
> (gimp-item-get-children l1)
Error: (<unknown> : 55536036) Procedure execution of gimp-item-get-children failed 
> (gimp-item-get-children l2)
Error: (<unknown> : 55533596) Procedure execution of gimp-item-get-children failed 

;; レイヤー1番目はレイヤーグループなので子供が居る・値が得られたが、
;; レイヤー2番目と3番目は通常のレイヤーなのでエラーになっている。
;; レイヤーグループのIDに対して (gimp-item-get-children item) を行うと、
;; (gimp-image-get-layers image) と似たような値を返すらしい?
つまり、2.8以降で、レイヤーに対して何か処理をするScript-fuを書こうとするなら…。 という感じになるのかな。実際試してないから分からんけど。

ちなみに。GIMP 2.6 上では、(gimp-item-is-group Item) が無いので、レイヤーグループかどうか調べようとしただけで、エラーになりそう。つまり、2.6 と 2.8 の両方で使えるスクリプトは書けない。

…本当に、共用できるスクリプトは書けないのだろうか? (gimp-version) を使ってバージョンを調べて、処理を分けることはできないのかな? TinyScheme で文字列を使って何かを判定する方法ってわからんけど。

GIMP 2.8 は、
> (gimp-version)
("2.8.0")
を返し、GIMP 2.6.11 は、
> (gimp-version)
("2.6.11")
を返すようではある…。ここでもし、1文字目と3文字目を取り出して比較に使えば、とか安易にやっちゃうと、GIMP 2.10.0 とか GIMP 10.0.0 が出てきたときに困りそう。Flash 9 から Flash 10 になった際も、一部でそういった障害が出ていた記憶があり。

以上です。

過去ログ表示

Prev - 2012/08 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project