「Script-Fu」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
編集の要約なし
 
(同じ利用者による、間の17版が非表示)
1行目: 1行目:
イメージ処理ソフト GIMP の Scheme ベースなカスタマイズ言語
{{Template:gimp}}
2.0 からサポートされている。
 
イメージ処理ソフト GIMP の Scheme ベース(GIMP 2.4 以降は [[TinyScheme]] ベースらしい ) なカスタマイズ言語で 2.0 からサポートされている。
[https://www.gimp.org/docs/ オフィシャルなドキュメントはここ]
[https://www.gimp.org/docs/ オフィシャルなドキュメントはここ]
* GIMP内から記述して実行する場合は、メニューのフィルターに"Script-Fuコンソール" っていうのがあるのでそれを実行して入力してく。(Script-Fu で使えるプロシージャの内容を調べるのにも使える。)
* ファイルに記述して実行する場合、ファイルの拡張子は .scm のテキストファイル。
* gimp の exe に引数で渡してバッチで実行もできる。
== スクリプトのデフォルトの場所 ==
Script-Fu のスクリプトファイルは、''$HOME/.gimp-2.x/scripts.''フォルダーで検索される。
Windowsでは、''%HOME%'' の環境変数が設定されていない場合、 ''%USERPROFILE%.gimp-2.x\scripts'' で検索される。
== スクリプトのバッチ実行 ==
Windowsの場合:
start gimp-2.2.exe -d -i -b  "(command-1 param-1 param2...)" "(gimp-quit 0)"
通常、最後のコマンド(スクリプトをバッチ実行する場合)は (gimp-quit 0)。
* オプション
** -b :バッチ。 command- n ...command - 非対話的に実行。
** -i :ユーザーインターフェイスなしで実行。
** -d :パターン、グラデーション、パレット、またはブラシをロードしない。 起動時間が早くなる。
** -f :フォントをロードしない。テキスト機能は使用できなくなるけど起動が早くなる。
== 引数 ==
文字列を渡すには、文字列を引用符で囲む必要がある。
start gimp-2.2.exe -i -b "(command-1 \"my string to be passed to command-1\")"
Gimpはパス名のスラッシュを理解して変換するので、以下のようなことが可能。
start gimp-2.2.exe -i -b "(command-1 \"c:/temp/some_file.gif\")"
<pre class="brush:scheme;">
; 例:フォルダ内のファイルを開いてアンシャープマスクをかけて保存する関数を実行する場合
; スクリプトファイルは、simple-unsharp-mask.scm ファイルにして gimp の /scripts フォルダに保存しておく
(define (batch-unsharp-mask pattern radius amount threshold)
  (let*
    ((filelist (cadr (file-glob pattern 1))))
    (while (not (null? filelist))
      (let*
        (
          (filename (car filelist))
          (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
          (drawable (car (gimp-image-get-active-layer image)))
        )
        (plug-in-unsharp-mask RUN-NONINTERACTIVE image drawable radius amount threshold)
        (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
        (gimp-image-delete image))
        (set! filelist (cdr filelist))
    )
  )
)
; で、コマンドライン的には以下のような感じで実行する。.png ファイルを対象。
c:\gimp\gimp-2.10.exe -d -f -i -b '(batch-unsharp-mask "*.png" 5.0 0.5 0)' -b '(gimp-quit 0)'
</pre>
== 関数や変数 ==
ぶっちゃけ資料なさすぎて使わせる気無いだろ!とか思いつつ、[[TinyScheme]] ベースなので、[[TinyScheme]] の資料を当たればいい。
TinySchemeが R5RS 仕様によるので、その仕様( https://schemers.org/Documents/Standards/R5RS/HTML/ ) を見るのもあり。
[[TinyScheme]] の関数を使いつつ、GIMP の[[プロシージャ]]と組み合わせて書いていく感じ?
Scheme の関数例
<div class="mcol3">
* [[define(TinyScheme)|define]]
* [[begin(TinyScheme)|begin]]
* [[quate(TinyScheme)|quate]]
* [[quate(TinyScheme)|quate]]
* [[lambda(TinyScheme)|lambda]]


* [[if(TinyScheme)|if]]
* [[cond(TinyScheme)|cond]]
* [[and(TinyScheme)|and]]
* [[or(TinyScheme)|or]]
* [[=(TinyScheme)|=]]
* [[let(TinyScheme)|let]]
* [[let*(TinyScheme)|let*]]
* [[set!(TinyScheme)|set]]
* [[eq?(TinyScheme)|eq?]]
* [[equal?(TinyScheme)|equal?]]
* [[zero?(TinyScheme)|zero?]]
* [[null?(TinyScheme)|null?]]
* [[real?(TinyScheme)|real?]]
* [[integer?(TinyScheme)|integer?]]
* [[map(TinyScheme)|map]]
* [[mapcar(TinyScheme)|mapcar]]
* [[assoc(TinyScheme)|assoc]]
* [[apply(TinyScheme)|apply]]
* [[car(TinyScheme)|car]]
* [[cdr(TinyScheme)|cdr]]
* [[list(TinyScheme)|list]]
* [[cons(TinyScheme)|cons]]
* [[member(TinyScheme)|member]]
* [[reverse(TinyScheme)|reverse]]
* [[+(TinyScheme)|+]]
* [[-(TinyScheme)|-]]
* [[/(TinyScheme)|/]]
* [[*(TinyScheme)|*]]
* [[sin(TinyScheme)|sin]]
* [[cos(TinyScheme)|cos]]
* [[tan(TinyScheme)|tan]]
* [[atan(TinyScheme)|atan]]
* [[floor(TinyScheme)|floor]]
* [[sqrt(TinyScheme)|sqrt]]
* [[char?(TinyScheme)|char?]]
* [[string-length(TinyScheme)|string-length]]
* [[string-list(TinyScheme)|string->list]]
</div>
<pre class="brush:scheme;">
; 変数をa,b を宣言して和を出す例
(let* ((a 1) (b 2))
  (+ a b)
)
; 関数 AddXY を inX inY の引数がある形で定義した例
(define (AddXY inX inY) (+ inX inY) )
; 関数をGIMPに登録する例
  (script-fu-register
    "script-fu-text-box"                        ; 関数名
    "Text Box"                                  ; メニューラベル
    "Creates a simple text box, sized to fit\
      around the user's choice of text,\
      font, font size, and color."              ; 概要説明
    "Michael Terry"                            ; 作者
    "copyright 1997, Michael Terry;\
      2009, the GIMP Documentation Team"        ; 権利
    "October 27, 1997"                          ; 作成日
    ""                    ; スクリプトが動作するイメージタイプ
    SF-STRING      "Text"          "Text Box"  ; 文字列変数
    SF-FONT        "Font"          "Charter"    ; フォント変数
    SF-ADJUSTMENT  "Font size"    '(50 1 1000 1 10 0 1)
                                                ; スピンボタン
    SF-COLOR      "Color"        '(0 0 0)    ; 色変数
  )
  (script-fu-menu-register "script-fu-text-box" "<Image>/File/Create/Text")
</pre>
=== 関数が取得できる引数の型 ===
{| class="wikitable"
! 引数型 !! データ型 !! 内容
|-
| SF-IMAGE || 整数 (image id)  || image id の取得に使う
|-
| SF-DRAWABLE  || 整数 (drawable id) || drawable id を取得
|-
| SF-VALUE || 文字列 || 数値の入力
|-
| SF-TOGGLE  || ブール (TRUE or FALSE) || ブール値の入力
|-
| SF-PATTERN  || 文字列 (パターン名) || パターンを選ばせる
|-
| SF-ADJUSTMENT  || リスト (開始値 最小値 最大値 小さな増分 大きな増分 [整数=0 or 浮動=1] [スライダー=0 or ロールボックス=1])  || ある範囲内の値のスライドバーか入力ボックスを作成する
|-
| SF-FILENAME || 文字列 (パス名)  || ファイルをブラウズさせる
|-
| SF-STRING || 文字列  || 入力ボックスの作成
|-
| SF-FONT || 文字列 (フォント名) || フォントを選ばせる
|-
| SF-COLOR  || リスト (赤 緑 青) [0-255]  || 色を選ばせる
|-
| SF-OPTION  || 文字列のリスト  || リストから項目を選ばせる
|-
| SF-GRADIENT || 文字列 (グラデーション名)  || グラデーションを選ばせるx
|-
|}


== プロシージャ一覧 ==
== プロシージャ一覧 ==
1,152行目: 1,333行目:
* [[script-fu-xach-effect]]
* [[script-fu-xach-effect]]
</div>
</div>
[[Category:GIMP]]

2022年12月8日 (木) 08:34時点における最新版

イメージ処理ソフト GIMP の Scheme ベース(GIMP 2.4 以降は TinyScheme ベースらしい ) なカスタマイズ言語で 2.0 からサポートされている。 オフィシャルなドキュメントはここ

  • GIMP内から記述して実行する場合は、メニューのフィルターに"Script-Fuコンソール" っていうのがあるのでそれを実行して入力してく。(Script-Fu で使えるプロシージャの内容を調べるのにも使える。)
  • ファイルに記述して実行する場合、ファイルの拡張子は .scm のテキストファイル。
  • gimp の exe に引数で渡してバッチで実行もできる。


スクリプトのデフォルトの場所

Script-Fu のスクリプトファイルは、$HOME/.gimp-2.x/scripts.フォルダーで検索される。 Windowsでは、%HOME% の環境変数が設定されていない場合、 %USERPROFILE%.gimp-2.x\scripts で検索される。


スクリプトのバッチ実行

Windowsの場合:

start gimp-2.2.exe -d -i -b  "(command-1 param-1 param2...)" "(gimp-quit 0)"

通常、最後のコマンド(スクリプトをバッチ実行する場合)は (gimp-quit 0)。

  • オプション
    • -b :バッチ。 command- n ...command - 非対話的に実行。
    • -i :ユーザーインターフェイスなしで実行。
    • -d :パターン、グラデーション、パレット、またはブラシをロードしない。 起動時間が早くなる。
    • -f :フォントをロードしない。テキスト機能は使用できなくなるけど起動が早くなる。

引数

文字列を渡すには、文字列を引用符で囲む必要がある。

start gimp-2.2.exe -i -b "(command-1 \"my string to be passed to command-1\")"


Gimpはパス名のスラッシュを理解して変換するので、以下のようなことが可能。

start gimp-2.2.exe -i -b "(command-1 \"c:/temp/some_file.gif\")" 


 ; 例:フォルダ内のファイルを開いてアンシャープマスクをかけて保存する関数を実行する場合
 ; スクリプトファイルは、simple-unsharp-mask.scm ファイルにして gimp の /scripts フォルダに保存しておく
 (define (batch-unsharp-mask pattern radius amount threshold) 
   (let* 
     ((filelist (cadr (file-glob pattern 1)))) 
     (while (not (null? filelist)) 
       (let* 
         (
           (filename (car filelist)) 
           (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) 
           (drawable (car (gimp-image-get-active-layer image)))
         ) 
         (plug-in-unsharp-mask RUN-NONINTERACTIVE image drawable radius amount threshold) 
         (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename) 
         (gimp-image-delete image)) 
         (set! filelist (cdr filelist))
     )
   )
 )
 
 ; で、コマンドライン的には以下のような感じで実行する。.png ファイルを対象。
 c:\gimp\gimp-2.10.exe -d -f -i -b '(batch-unsharp-mask "*.png" 5.0 0.5 0)' -b '(gimp-quit 0)'


関数や変数

ぶっちゃけ資料なさすぎて使わせる気無いだろ!とか思いつつ、TinyScheme ベースなので、TinyScheme の資料を当たればいい。 TinySchemeが R5RS 仕様によるので、その仕様( https://schemers.org/Documents/Standards/R5RS/HTML/ ) を見るのもあり。 TinyScheme の関数を使いつつ、GIMP のプロシージャと組み合わせて書いていく感じ?


Scheme の関数例

 ; 変数をa,b を宣言して和を出す例
 (let* ((a 1) (b 2))
   (+ a b)
 )
 
 ; 関数 AddXY を inX inY の引数がある形で定義した例
 (define (AddXY inX inY) (+ inX inY) )
 
 ; 関数をGIMPに登録する例
  (script-fu-register
    "script-fu-text-box"                        ; 関数名
    "Text Box"                                  ; メニューラベル
    "Creates a simple text box, sized to fit\
      around the user's choice of text,\
      font, font size, and color."              ; 概要説明
    "Michael Terry"                             ; 作者
    "copyright 1997, Michael Terry;\
      2009, the GIMP Documentation Team"        ; 権利
    "October 27, 1997"                          ; 作成日
    ""                     ; スクリプトが動作するイメージタイプ
    SF-STRING      "Text"          "Text Box"   ; 文字列変数
    SF-FONT        "Font"          "Charter"    ; フォント変数
    SF-ADJUSTMENT  "Font size"     '(50 1 1000 1 10 0 1)
                                                ; スピンボタン
    SF-COLOR       "Color"         '(0 0 0)     ; 色変数
  )
  (script-fu-menu-register "script-fu-text-box" "<Image>/File/Create/Text")


関数が取得できる引数の型

引数型 データ型 内容
SF-IMAGE 整数 (image id) image id の取得に使う
SF-DRAWABLE 整数 (drawable id) drawable id を取得
SF-VALUE 文字列 数値の入力
SF-TOGGLE ブール (TRUE or FALSE) ブール値の入力
SF-PATTERN 文字列 (パターン名) パターンを選ばせる
SF-ADJUSTMENT リスト (開始値 最小値 最大値 小さな増分 大きな増分 [整数=0 or 浮動=1] [スライダー=0 or ロールボックス=1]) ある範囲内の値のスライドバーか入力ボックスを作成する
SF-FILENAME 文字列 (パス名) ファイルをブラウズさせる
SF-STRING 文字列 入力ボックスの作成
SF-FONT 文字列 (フォント名) フォントを選ばせる
SF-COLOR リスト (赤 緑 青) [0-255] 色を選ばせる
SF-OPTION 文字列のリスト リストから項目を選ばせる
SF-GRADIENT 文字列 (グラデーション名) グラデーションを選ばせるx

プロシージャ一覧