2015年1月16日金曜日

GIMP Script-Fu (3) 先ずは ひとつ

前回 に引き続き、 GIMP Script-Fu の記述に関して です。
何はともあれ、ひとつ、書いて動かしてみましょうか。
パラメータの種類、言い換えれば、入力や選択を促す 項目 を見てみます。
ユーザーとのインターフェイスの部分ですね。


通常のプログラミング言語の場合、ユーザーインターフェイスの記述は、結構、大変です。
ユーザビリティ と言って、如何に使い易い画面にするかは、重要な部分です。
処理方法とも、密接に結び付きますから、センスも必要な要素です。

しかし、GIMP の Script-Fu では、この部分が、簡素に出来ており、
逆の見方をすれば、自由なインターフェイスを組み立てる訳ではありません。
基本的には、既に出来上がっている GUI (グラフィカルユーザーインターフェイス) に、
ひと画面を加える形になります。

プログラム(関数)の中で扱う変数に値を 入力 もしくは 選択 する部分は、定型の記述方法になります。

その部分だけで、画像処理や変数の操作をしない例を、最初の練習に選びました。
                   変数に関しては、表示に当たって、型変換をしていますが ... 。.

ユーザーが指定する部分と、その結果を表示するだけの もの です。
ファイル名: Test_All_Input_Boxes_Results.scm

;関数(関数名と引数と表示のみ)

(define (script-fu-test-all-input-boxes-results
                adjustment0
                adjustment1
                brush
                channel
                color
                dirname
                drawable
                filename
                font
                gradient
                image
                layer
                option
                palette
                pattern
                string
                toggle
                value)
  (gimp-message-set-handler 0)
            ;The current handler type { MESSAGE-BOX (0), CONSOLE (1), ERROR-CONSOLE (2) }
  (gimp-message (string-append
    "エラーメッセージ ではありません。" "\n"
    "\n"
    "Adjust0 is "  (number->string adjustment0) "\n"
    "Adjust1 is "  (number->string adjustment1) "\n"
    "Brush is "    "'(" "\"" (list-ref brush 0) "\" "
                        (number->string (list-ref brush 1)) " "
                        (number->string (list-ref brush 2)) " "
                        (number->string (list-ref brush 3)) ")\n"
    "Channel is "  (number->string channel) "\n"
    "Color is "    "'(" (number->string (car color)) " "
                        (number->string (cadr color)) " "
                        (number->string (caddr color)) ")\n"
    "DirName is " "\"" dirname "\"\n"
    "Drawable is " (number->string drawable) "\n"
    "FileName is " "\"" filename "\"\n"
    "Font is "     "\"" font "\"\n"
    "Gradient is " "\"" gradient "\"\n"
    "Image is "    (number->string image) "\n"
    "Layer is "    (number->string layer) "\n"
    "Option is "   (number->string option) "\n"
    "Palette is "  "\"" palette "\"" "\n"
    "Pattern is "  "\"" pattern "\"" "\n"
    "String is "   "\"" string "\"\n"
    "Toggle is "   (if (equal? toggle TRUE) "TRUE\n" "FALSE\n")
    "Value is "    (number->string value)
  ))
)


;登録

(script-fu-register
  "script-fu-test-all-input-boxes-results"                ;func name
  "<Image>/Script-Fu/Test/All Input Boxes & Results"    ;menu label
  "Show all input boxes"                                        ;description
  "ShiroYuki_Mot"                                                    ;author
  "(c) 2015- ShiroYuki_Mot"                                     ;copyright notice
  "2015/01/03"                                                        ;date created
  ""                                                                    ;image type on the script
  SF-ADJUSTMENT "SF-ADJUSTMENT 0" '(256 1 1024 1 10 0 0)        ;0:Slider
  SF-ADJUSTMENT "SF-ADJUSTMENT 1" '(256 1 1024 1 10 0 1)        ;1:Spinner
  SF-BRUSH      "SF-BRUSH"        '("Circle (15)" 1.0 20 0)
  SF-CHANNEL    "SF-CHANNEL"      0
  SF-COLOR      "SF-COLOR"        '(255 255 255)
  SF-DIRNAME    "SF-DIRNAME"   ""
  SF-DRAWABLE   "SF-DRAWABLE"     0
  SF-FILENAME   "SF-FILENAME"     ""
  SF-FONT       "SF-FONT"         "Sans"
  SF-GRADIENT   "SF-GRADIENT"     "Blue Green"
  SF-IMAGE      "SF-IMAGE"        0
  SF-LAYER      "SF-LAYER"        0
  SF-OPTION     "SF-OPTION"       '("Option1" "Option2" "Option3")
  SF-PALETTE     "SF-PALETTE"         ""
  SF-PATTERN    "SF-PATTERN"      "Pine"
  SF-STRING     "SF-STRING:\nNewLineSample"  "The Gimp"
  SF-TOGGLE     "SF-TOGGLE"       FALSE
  SF-VALUE      "SF-VALUE"        "10"
)

コードのブラウザ表示上では、 ¥ が  \ になってしまいますが、エディタ上に CopyPaste すれば、元の ¥ に戻ると思います。
薄いグレーの部分は、メッセージボックスとして表示したかったのですが、駄目でした。  除外して下さい。.
                                              何方か、方法をご存知でしたら、お教え下さい。.

実際に、ご自分で Script-Fu を書いて行く場合には、
この中の各要素を、適宜、組み合わせて行く事になります。

尚、Script-Fu は、そのベースとなる GIMP のバージョンによって、記述や変数の初期値に違いがあります。
ソースコードのコピペですと、思わぬ泥沼かもです。  注意しましょう。
今回の例は GIMP 2.6.11 で試しています。
         GIMP 2.4 以前のものは、メニュー位置( ;menu label)の指定が違っているものが多いですね。.



主要な各要素項目の詳細を はじめての Script-Fu スクリプト GIMP マニュアル から引用して、転記しておきます。  参考用に。

パラメーターの型 説明
SF-IMAGE 既に開いてある画像を操作するためのスクリプトを作るときは、 必須のパラメーターの直後にこのパラメーターを置かねばなりません。 GIMP は画像を参照するための情報をこのパラメーターに乗せてスクリプトに渡します。 3
SF-DRAWABLE 既に開いてある画像を操作するためのスクリプトを作るときは、 SF-IMAGE 型のパラメーターのつぎにこのパラメーターを置かなくてはなりません。 これは活性レイヤーを参照します。 GIMP は活性レイヤーを参照するための情報をこのパラメーターに乗せてスクリプトに渡します。 17
SF-VALUE 数値と文字列の両方を受け入れる型です。 初期設定のテキストを渡すとき引用符をエスケープ処理しなければならなくなるので、 文字列には SF-STRING 型の方が適しています。 42
SF-STRING 文字列を収める変数です。 "Some text"
SF-COLOR このパラメーターが要求する色の情報を示します。 '(0 102 255)
SF-TOGGLE 真理 2 値をとるチェックボックスを表示します。 有効なら TRUE、 無効なら FALSE

パラメーターの型 説明
SF-ADJUSTMENT ダイアログ上に値を調節するためのウィジェットを作成します。
SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type)
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
value当初の数値 デフォルト
lower; upper最低値と最高値 (選べる値の範囲)
step_inc最小変動値、 公差
page_incPgUp キーと PgDn キーによる操作での公差
digits小数点以下の桁数 (十進数)
typeスライダーは SF-SLIDER もしくは 0、 スピンボックスは SF-SPINNER もしくは 1
SF-COLOR ダイアログにカラーボタンを作成します。
SF-COLOR "label" '(red green blue)
もしくは
SF-COLOR "label" "color"
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
'(red green blue)赤・緑・青の 3 つの成分
"color"CSS notatation の色名
SF-FONT ダイアログにフォント選択ウィジェットを作成します。 フォント名を文字列変数形式で返します。
GIMP にはこの返し値を手軽に扱えるテキスト処理プロシージャーが 2 つ備わっています。
  • (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font)
  • (gimp-text-get-extents-fontname text size unit font)
いずれも fontname に得られたフォント名を入れます。 フォントの大きさには有益な値を設定しておくと良いでしょう。 24 ピクセルがおすすめです。
SF-FONT "label" "fontname"
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"fontname"初期状態でのフォント名
SF-BRUSH ダイアログにブラシ選択ウィジェットを作成します。 このウィジェットは縮小見本表示があります。 ここはクリックしたまま待つと大きく表示されます。 さらに  ...  のラベルがついたボタンが作られます。 このボタンをクリックするとブラシ選択ダイアログが開かれ、 ブラシを選んだりその特徴を変更できるしくみになっています。
SF-BRUSH "label" '("Brush Name" opacity spacing mode)
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"brush name"ブラシの名前。 たとえば "Pencil 01"
opacity不透明度 (0-100)
spacing間隔 (対ブラシ高さ%)
mode描画モード番号。 たとえば 0 なら標準モード
たとえばSF-BRUSH "Brush" '("2. Hardness 075" 100 44 0)として呼び出してダイアログで何も変更しなかった場合、 返ってくるパラメーターは'("2. Hardness 075" 100 44 0)となります。
SF-PATTERN ダイアログにパターン選択ウィジェットを作成します。 このウィジェットは縮小見本表示があります。 ここはクリックしたまま待つと大きく表示されます。 さらに  ...  のラベルがついたボタンが作られます。 このボタンをクリックするとパターン選択ダイアログが開かれ、 パターンを選んだりその特徴を変更できるしくみになっています。
SF-PATTERN "label" "Pattern Name"
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"Pattern Name"パターンの名前。 たとえば "Maple Leaves"
スクリプトが呼び出されたときに返される値はパターンの名前をもつ文字列変数です。 たとえばSF-PATTERN "Pattern" "Maple Leaves"として呼び出してダイアログで何も変更しなかった場合、 返ってくるパラメーターは"Maple Leaves"となります。
SF-GRADIENT ダイアログにグラデーション選択ウィジェットを作成します。 グラデーションボタンが設置され現在選ばれているグラデーションが表示されます。
このボタンはクリックするとグラデーション変更ダイアログが開かれ他のグラデーションも選べるしくみになっています。
SF-GRADIENT "label" "gradientname"
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"gradientname"初期状態でのグラデーション名
スクリプトが呼び出されたときに返される値はグラデーションの名前をもつ文字列変数です。 たとえばSF-GRADIENT "Gradient" "Deep Sea"として呼び出してダイアログで何も変更しなかった場合、 返ってくるパラメーターは"Deep Sea"となります。
SF-PALETTE ダイアログにパレット選択ウィジェットを作成します。 このウィジェットは縮小見本とパレット名を表示します。 縮小見本はボタンになっておりクリックするとパレット選択ダイアログが開かれ他のパレットも選べるしくみになっています。
SF-PALETTE "label" "Palette Name"
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"Palette Name"パレットの名前。 たとえば "Named Colors"
スクリプトが呼び出されたときに返される値はパレットの名前をもつ文字列変数です。 たとえばSF-PALETTE "Palette" "Named Colors"として呼び出してダイアログで何も変更しなかった場合、 返ってくるパラメーターは"Named Colors"となります。
SF-FILENAME ダイアログにファイル選択ウィジェットを作成します。 ファイル名が記されたボタンが設置されます。 このボタンをクリックするとファイルブラウザーが開かれ、 ファイルを探してひとつ選ぶ操作ができるしくみになっています。
SF-FILENAME "label" (string-append "" gimp-data-directory "path/to/file.ext")
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"path/to/file.ext"gimp-data-directory からの相対パスとファイル名
スクリプトが呼び出されたときに返される値はファイルの名前と保管場所を記した文字列変数です。
SF-DIRNAME 対話式操作でのみ有益です。 ファイルではなくディレクトリーを選択するウィジェットであることのほかは SF-FILENAME と酷似しています。
SF-DIRNAME "label" (string-append "" gimp-data-directory "path")
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"path"gimp-data-directory からの相対パス
スクリプトが呼び出されたときに返される値はディレクトリー名とそれまでの筋道を記した文字列変数です。
SF-OPTION ダイアログに数々の選択肢からひとつを選ぶコンボボックスウィジェットを作成します。
選択肢はまとめてリストにして渡し、 ウィジェットは最初の項目を初期値として表示します。
SF-OPTION "label" '("option 1" "option 2" [... "option n"])
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"option 1"最初のオプション。 初期設定値となる
"option 2"第2のオプション
"option n"それ以上のオプション。 無くても良いが、 いくつでも増やせる
スクリプトが呼び出されたときに返される値はオプション項目の番号です。 最初のオプションが 0 番です。
SF-ENUM ダイアログに列挙型リストの選択ウィジェットを作成します。 指定された列挙型の項目を並べたコンボボックスが設けられます。 使える列挙型は登録済のものに限られ、 その名前から冒頭のGimpを取り除いた語で指定します。 第 2 のパラメーターには初期設定値を、 その略称で指定します。
SF-ENUM "label" '("enum type" "default choice")
ウィジェット変数表
要素説明
"label"ウィジェットの前に貼られる語句
"enum type"列挙型の登録名
"default choice"初期設定値。 略称で指定する
スクリプトが呼び出されたときに返される値は扱われる列挙型での値です。

.


0 件のコメント:

コメントを投稿