DUICUO

GIMPスクリプトを書くと画像処理が速くなります

一連の画像にエフェクトを追加しながら、GIMP のスクリプト言語である Script-Fu を学習します。

少し前、数式画像を黒板風に加工したいと思いました。最初はGIMPを使ってみて、結果には満足していました。問題は、画像に対して複数の操作を行う必要があり、このスタイルを再び使いたいと思った時に、全ての画像で同じ手順を繰り返すのは面倒だったことです。それに、これらの手順はすぐに忘れてしまうだろうと思っていました。

フーリエ変換方程式(Cristiano Fontana, [CC BY-SA 4.0] 4)

GIMPは素晴らしいオープンソースの画像エディタです。長年使っていますが、バッチ処理機能やScript-Fuメニューを実際に試したことがありませんでした。今回は試してみる絶好の機会です。

Script-Fu とは何ですか?

Script-FuはGIMPに組み込まれているスクリプト言語です。Schemeベースのプログラミング言語です。Schemeを使ったことがない方は、ぜひ試してみてください。とても便利です。Script-Fuは画像処理に即効性があり、生産性の向上をすぐに実感できるので、初心者には最適だと思います。Pythonを使ってスクリプトを書くこともできますが、デフォルトではScript-Fuが使用されています。

Schemeに慣れるために、GIMPのドキュメントには詳細なチュートリアルが用意されています。SchemeはLispに似た言語であるため、主な特徴はプレフィックス記法と多数の括弧の使用です。関数と演算子は、プレフィックスを介してオペランドリストに適用されます。

  1. (函数名 操作数 操作数 ...)
  2. (+ 2 3 )
  3. 返回 5
  4. ( list 1 2 3 5 )
  5. 返回一个列表,包含 1 2 3 5

GIMPの機能リストの完全なドキュメントを見つけるのに少し時間がかかりましたが、実際には非常にシンプルです。ヘルプメニューには、利用可能なすべての機能に関する包括的なドキュメントを備えた手順ブラウザがあります。

GIMP 手順ブラウザ

GIMPのバッチモードを使用する

-bオプションを使用すると、GIMP をバッチモードで起動できます。` -bオプションの引数には、実行したいスクリプト、または-を指定すると、GIMP をコマンドラインモードではなく対話型モードに切り替えることができます。通常、GIMP を起動するとグラフィカルインターフェースが起動しますが、 -iオプションを使用することで無効にできます。

最初のスクリプトを書き始める

chalk.scmというファイルを作成し、環境設定ウィンドウの「フォルダ」オプションの「スクリプト」で指定したscriptフォルダに保存します。私の場合は$HOME/.config/GIMP/2.10/scriptsです。

chalk.scmファイルに次の内容を記述します。

  1. ( define ( chalk filename grow - pixels spread - amount percentage )
  2. ( let * (( image ( car ( gimp - file - load RUN - NONINTERACTIVE filename filename )))
  3. ( drawable ( car ( gimp - image - get - active - layer image )))
  4. ( new - filename ( string - append "modified_" filename )))
  5. ( gimp - image - select - color image CHANNEL - OP - REPLACE drawable '(0 0 0))
  6. (gimp-selection-grow image grow-pixels)
  7. (gimp-context-set-foreground ' ( 0 0 0 ))
  8. ( gimp - edit - bucket - fill drawable BUCKET - FILL - FG LAYER - MODE - NORMAL 100 255 TRUE 0 0 )
  9. ( gimp - selection - none image )
  10. ( plug - in - spread RUN - NONINTERACTIVE image drawable spread - amount spread - amount )
  11. ( gimp - drawable - invert drawable TRUE )
  12. ( plug - in - randomize - hurl RUN - NONINTERACTIVE image drawable percentage 1 TRUE 0 )
  13. ( gimp - file - save RUN - NONINTERACTIVE image drawable new - filename new - filename )
  14. ( gimp - image - delete image )))

スクリプト変数を定義する

スクリプト内の関数(define (chalk filename grow-pixels spread-amound percentage) ...)chalkという名前の新しい関数を定義します。そのパラメータはfilenamegrow-pixelsspread-amoundpercentageです。`define` 内のすべてがchalk関数の本体を形成します。長い変数名がハイフンで区切られていることにお気づきかもしれません。これはLisp系言語でよくdefineれるスタイルです。

(let* ...)関数は特別なプロセス手順この関数では、関数本体内でのみ有効な一時変数を定義できます。これらの一時変数にはimagedrawablenew-filenameが含まれます。`gimp gimp-file-loadを使用して画像を読み込み、その画像に含まれる画像のリストを返します。次に、 car関数を使用して最初の画像を選択します。次に、最初のアクティブレイヤーを選択し、その参照をdrawable変数に格納します。最後に、画像の新しいファイル名を含む文字列を定義します。

プロセスをより理解しやすくするために、詳しく説明します。まず、GIMPをGUIで起動し、 「フィルター」→「Script-Fu」→「コンソール」をクリックしてScript-Fuコンソールを開きます。この場合、変数は永続化する必要があるため、 let * 」は使用できません。 define関数を使用してimage変数を定義し、画像への正しいパスを指定します。

  1. ( define image ( car ( gimp - file - load RUN - NONINTERACTIVE "Fourier.png" "Fourier.png" )))

GUIでは何も起こっていないように見えますが、画像は読み込まれています。以下の手順で画像を表示する必要があります。

  1. ( gimp - display - new image )

表示された画像を含むGUI

次に、アクティブ レイヤーを取得して、 drawable変数に保存します。

  1. ( define drawable ( car ( gimp - image - get - active - layer image )))

最後に、画像の新しいファイル名を定義します。

  1. ( define new - filename "modified_Fourier.png" )

コマンドを実行すると、Script-Fu コンソールに次のように表示されます。

Script-Fuコンソール

画像に対して操作を実行する前に、スクリプト内の関数パラメータとして使用される変数を定義する必要があります。

  1. ( define grow - pixels 2 )
  2. ( define spread - amount 4 )
  3. ( define percentage 3 )

画像処理

関連するすべての変数が定義されたので、画像を操作できます。スクリプト操作はコンソール上で直接実行できます。最初のステップは、アクティブレイヤーで黒を選択することです。色は3つの数値のリスト(list 0 0 0)または'(0 0 0)として記述されます。

  1. ( gimp - image - select - color image CHANNEL - OP - REPLACE drawable '(0 0 0))

選択した色の画像

2 つのピクセルの選択範囲を拡大します。

  1. ( gimp - selection - grow image grow - pixels )

選択した色の画像

前景色を黒に設定し、選択範囲を黒で塗りつぶします。

  1. ( gimp - context - set - foreground '(0 0 0))
  2. (gimp-edit-bucket-fill drawable BUCKET-FILL-FG LAYER-MODE-NORMAL 100 255 TRUE 0 0)

選択範囲が黒く塗りつぶされた画像

選択範囲を削除:

  1. ( gimp - selection - none image )

選択されていない画像

ピクセルをランダムに移動する:

  1. ( plug - in - spread RUN - NONINTERACTIVE image drawable spread - amount spread - amount )

ピクセルを移動した画像

画像の色を反転:

  1. ( gimp - drawable - invert drawable TRUE )

ピクセルを移動した画像

ランダム化されたピクセル:

  1. ( plug - in - randomize - hurl RUN - NONINTERACTIVE image drawable percentage 1 TRUE 0 )

ピクセルを移動した画像

画像を新しいファイルに保存します。

  1. ( gimp - file - save RUN - NONINTERACTIVE image drawable new - filename new - filename )

フーリエ変換方程式(Cristiano Fontana、CC BY-SA 4.0)

スクリプトをバッチモードで実行する

スクリプトが何をするのかがわかったので、バッチ モードで実行できます。

  1. gimp - i - b '(chalk "Fourier.png" 2 4 3)' - b '(gimp-quit 0)'

chalk関数を実行した後、 -bオプションを指定した 2 番目の関数gimp-quitを呼び出して、GIMP に終了を指示します。

もっと詳しく知る

このチュートリアルでは、GIMP の組み込みスクリプト機能の使い方と、GIMP の Scheme 実装である Script-Fu を紹介します。さらに学習を進めたい場合は、公式ドキュメントと入門チュートリアルを参照することをお勧めします。Scheme や Lisp に慣れていない場合は、最初の構文に少し戸惑うかもしれませんが、それでも試してみることをお勧めします。きっと良い驚きがあるでしょう。