2024年12月3日火曜日

GIMP Script-Fu v3 (1) 雛形

大昔、GIMP Script-Fu の雛形を作りました。
GIMP 本体や API も変わって来ていますので、
此処で、改めて、投稿して置きましょう。
Script-Fu v3 の 雛形 です。


此の投稿は、既に、GIMP Script-Fu の経験がある方が対象です。
ある程度は書ける方が、新しい Script-Fu v3 で書く事を前提とします。

なので、初心者の方は、
別途、Internet 上にある 情報を検索の上、ご覧下さい。

また、現在、GIMP は RC (Release Candidate) ですので、
正式公開後に、此方の雛形も、訂正があるかも知れません。
其の辺りを、汲み取って戴いて、ご覧下さい。


さて、
GIMP 2 迄は、Script-Fu では、単独 Layer が基本的な対象でした。
複数を扱うには、
移動等では、GUI で Link を設定し、複数を同等に扱う事が可能でしたね。

しかし、GIMP 3 になると、
Link は 廃止 され、
Multi Select 機能が実装され、
此れに取って代わっています。


なので、
以下の雛形は 複数 Layers 対象のもの を掲載します。

しかし、
実際に書いて見ると分かりますが、
複数を扱うのは 容易 ではありません!。
相応の プログラミング スキル が要求される と思って下さい。

もし、挫折したなら、
単独 Layer を対象とするもの で書きましょう。
詳細は 後述 しましょう。


さて、 雛形 。

#!/usr/bin/env gimp-script-fu-interpreter-3.0
;!# Close comment started on first line.

; v2>v3
;  TRUE => #t  FALSE => #f
;  Use script-fu-register-filter
;  Now, drawables is a vector #(...)

;Scheme for GIMP 3.0.0-RC1 +

(define (<<prg-name>>
         <<image>>
         <<drawables>>
         <<arg1>>
         <<arg2>>
         <<...>>
        )
  (script-fu-use-v3)
  (gimp-image-undo-group-start image)
  (let* (
          (<<variable>> <<value>>)
        )
    <<main-routine ...>>
  )
  (gimp-displays-flush)
  (gimp-image-undo-group-end image)
)

(script-fu-register-filter
  "<<prg-name>>"        ;func name
  _"<<text>>"             ;menu label
  _"<<text2>>"            ;description
  "<<your-name>>"         ;author
  "<<your-name>>"         ;copyright notice
  "<<date>>"              ;date created
  "*"                    ;image type on the script
  SF-ONE-OR-MORE-DRAWABLE         ; v3 >>> additional argument
  ;SF-IMAGE       "Image"    0    ;Commment out for v3
  ;SF-DRAWABLE    "Drawable" 0    ;Commment out for v3
  <<SF-???>>      "<<arg1-text>>" <<???>>
  <<SF-???>>      "<<arg2-text>>" <<???>>
)

(script-fu-menu-register "<<prg-name>>"
                         "<Image>/<<menu-position>>")


もし、
単独 Layer が対象の場合には、
  SF-ONE-OR-MORE-DRAWABLE         ; v3 >>> additional argument

 SF-ONE-DRAWABLE         ; v3 >>> additional argument
に書き換えて下さい。
実際には、
渡される drawables の個数を照査し、必要なら エラー処理 です。
Main Routine の前に、
Logic Checks と Escape が必要になります。
上述の件、此処で、細かくは触れません。



0 件のコメント:

コメントを投稿