2012/08/04(土) [n年前の日記]
#1 [gimp][cg_tools] GIMPで矢印を描く方法
GIMP上で、スクリプトを使って矢印を描く方法について、少し検索。見つかった範囲でまとめてみたり。
_mieki256 @ ウィキ - GIMPで矢印を描く方法
最初からそういう機能があればいいのに、と思わないでもないけれど。
_mieki256 @ ウィキ - GIMPで矢印を描く方法
最初からそういう機能があればいいのに、と思わないでもないけれど。
[ ツッコむ ]
#2 [gimp][cg_tools] GIMP 2.8.0のレイヤーグループについて少し調べてる
Script-fu からどうやって操作したらいいのかな、と。
例えば、下のようなレイヤー構造があったとする。
ちなみに。GIMP 2.6 上では、(gimp-item-is-group Item) が無いので、レイヤーグループかどうか調べようとしただけで、エラーになりそう。つまり、2.6 と 2.8 の両方で使えるスクリプトは書けない。
…本当に、共用できるスクリプトは書けないのだろうか? (gimp-version) を使ってバージョンを調べて、処理を分けることはできないのかな? TinyScheme で文字列を使って何かを判定する方法ってわからんけど。
GIMP 2.8 は、
例えば、下のようなレイヤー構造があったとする。
┬─ レイヤーグループ ┐ │ ├─ 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を書こうとするなら…。
- 得られたレイヤーIDを使って、そのレイヤーがレイヤーグループか否かを調べる。
- 通常レイヤーなら、旧来通りの処理をする。
- レイヤーグループなら、子供の情報(そのレイヤーグループが持っているレイヤーの個数とレイヤーIDのリスト)を取得して、各レイヤーに対する処理を繰り返す。
ちなみに。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 になった際も、一部でそういった障害が出ていた記憶があり。
[ ツッコむ ]
以上、1 日分です。