2025年3月6日木曜日

GIMP 3 Script-Fu v3 Text Layer を作ろう

GIMP 3.0.0-RC3 では 動か無かった gimp-text-layer-new ですが、
最新の git Version (Nightly) で正常に機能する様になったので、
其の辺りの事を書いて見ましょう。
今迄の書き方は ... 通りませぬ。


少しずつですが、GIMP Script 群 を 3 時代に向けて書き直し出しました。
先ずは、比較的 簡単? な Script-Fu から。
でも、 Text Layer 作成を扱うもの は GIMP 3.0.0-RC3 と Script-Fu v3 で、
コケていたのですが ... 。

漸く、 git Version (Nightly) で正常に機能する様になったのです。

原因は、一部の引数 が機能していなかった所為です。
恐らく、次期 の RC 若しくは RC が取れた正式版 でお披露目になる筈です。


此処では、一足先に、Text Layer の扱い方に触れて置きます。
利用する言語は Script-Fu そう Scheme (LISP) です。


幾つか、ポイントを。

Font の呼び出しは 名前 では無く id に変更されています。
どうやら、
利用フォントに依って、名前の重複があった様で、
其れへの対応 と聞いています。
基本的に、大多数の 要素 が id で処理されています。
???-get-by-name の類は 正確に答えを返さ無いケースがあると思って下さい。

色に関しては、3要素から4要素へと変わっています。
基本は RGB の三つ と 透明度 と です。
"black" "white" "red" 等の 既登録名も使える様です。

また、現状では、言語設定に係わらず、
文字の単位は INCH の様で、
設定変更は UNIT-PIXEL UNIT-POINT 等の ENUM で可能です。
Default の UNIT を取って 其れを引数に代入すると、
とても大きな文字が出てびっくり!しますので、ご用心を。

  例 (define unit (gimp-get-default-unit)) 、
  小さな画像で試していたら、遥か外に飛び出す程の大きさでした。


Console の経緯でご覧戴きます。

> (script-fu-use-v3)
()
>  (define image (gimp-image-new 600 400 RGB))
image
>  (gimp-display-new image)
1
> (define text "test")
text
> (define font (gimp-font-get-by-name "Monospace Bold"))
font
> font
2446
> (define unit UNIT-POINT)
unit
> unit
3
> (define size 17.0)
size
> (gimp-text-layer-new image text font size unit)
2
> (define parent 0) (define position 0)
parentposition
> (gimp-image-insert-layer image 2 parent position)
()
> (define unit UNIT-PIXEL)
unit
> unit
0
> (define layer (gimp-text-layer-new image text font size unit))
layer
> layer
3
> (gimp-image-insert-layer image layer parent position)
()
> (gimp-displays-flush)
()




[2025/03/08] 追記

おっとぉぅ、すっかり忘れていました。
上の例は GUI に設定された Foreground Color で描画しています。
Text Layer の色を指定するなら、以下を参照して下さい。
色指定構文の位置は、変数 layer に値がセットされた後なら OK です。

  Context の Color を変更する手もありますが ... 。

(script-fu-use-v3)
(define image (gimp-image-new 600 400 RGB))
(gimp-display-new image)
(define text "test")
(define font (gimp-font-get-by-name "Monospace Bold"))
(define unit UNIT-POINT)
(define size 17.0)
(define layer (gimp-text-layer-new image text font size unit))
(define parent 0) (define position 0)
(gimp-image-insert-layer image layer parent position)

(define color "red")              ; Color=Red    value=registed-name
(define color '(0 0 0 255))   ; Color=Black  value=RBGA-list
(gimp-text-layer-set-color layer color)

(gimp-displays-flush)


0 件のコメント:

コメントを投稿