ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

GIMPを使ってコマンドラインから画像を変換する。

Script-Fuを使いましょう。みんな大好きSchemeです。

GIMPでScript-Fuを使うときの問題点

GIMPでScript-Fuを使うには、Script-Fuのソースを特定のフォルダーに置く必要があります。私の環境ですと、この2つのフォルダーがScript-Fuの置き場になります。
C:\home\.gimp-2.6\scripts
C:\Program Files (x86)\GIMP-2.0\share\gimp\2.0\scripts
一人で作業しているときには良いのですが、複数人で共同作業をしたり、他のPCで画像の変換作業をすると、Script-Fuが本当に同じ物なのか管理するのが大変になります。そこで少しやり方を変えて、作業フォルダーのScript-Fuを使う方法を考えました。

準備

Windows環境を想定しています。GIMPへのパスは通して下さい。

次に変換に使うScript-Fuを用意します。今回は画像をモノクロにするgrayscale.scmで説明します。

(define (grayscale filename outputfilename)
	(let* ((image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
          	(drawable (car (gimp-image-get-active-layer image))))
		(gimp-image-convert-grayscale image)
		(gimp-file-save RUN-NONINTERACTIVE image drawable outputfilename outputfilename)
     		(gimp-image-delete image)))

このgrayscale.scmを作業フォルダーの下に作ったScriptフォルダーにおいてください。フォルダー名は別にScriptで無くても何でも良いです。
次に、作業フォルダーにgimprc.txtを用意し、中に一行だけ付け加えます。

(script-fu-path "script")

gimprc.txtのファイル名が気に入らない人は、好きに変えてください。

作戦としては、GIMPの起動時に用意したgimprc.txtを起動ファイルとして読み込ませ、Script-Fuを読み込むフォルダーを変更します。GIMP起動後に、指定したフォルダーから実際に使うScript-Fuを読み込み、画像処理を行います。

batファイルを用意

この状態でもコマンドラインから実行出来ます。コマンドラインでは実行するにはエスケープが面倒なのと、画像変換のログとしてbatファイルを残したいので、batファイルを作成します。モノクロ化程度なら良いのですが、他の微妙な変換をするときは画像処理に使ったパラメータは記録しておきたいです。

gimp-2.6 -i -f -g gimprc.txt --batch "(grayscale \"foo.jpg\" \"foo_gray.jpg\" ) " --batch "(gimp-quit 0)"

これで、起動時にgimprc.txtが読み込まれ、作業フォルダーの下にあるScriptフォルダーからgrayscale.scmが読み込まれ、grayscaleが呼ばれ画像処理をした後、gimp-quitで終了します。

Script-Fuに関するメモ

Script-Fuのデバッグ環境はとても貧弱です。デバッグ時は、無理にコマンドラインから動かさずに、~\.gimp-2.6\scriptsにスクリプトファイルを置いてデバッグしましょう。
一つの目安として、GIMP起動後にScript-Fuコンソールを呼び出し、自分で作った関数名を打ち込んでみましょう。上手く関数が読み込まれていれば、このように表示されます。

> grayscale
#<CLOSURE>

逆に、上手く読めていないときは、このような表示になります。(わざと関数名を間違えてます)

> gray-scale
Error: eval: unbound variable: gray-scale 

あとは、変数を見たいところに(print foo)等を入れるくらいですが、Script-Fu自体は小さいスクリプトなのでゆっくり目で見ていけば大体悪いところは見つかります。

やりたい画像処理から、実際に使っている関数名(今回だとgimp-image-convert-grayscale)を調べるのは手こずります。例えばGIMP モノクロで検索すると、単純なgrayscaleではなく、セピア調にしたり妙に凝ったモノクロ化ばかりが見つかります。やりたい処理の綴りがわかっているなら、Script-Fuコンソールから参照ボタンを押し、検索の窓にやりたいことを入力してみましょう。

grayscaleの場合は、grayと入力するだけで、gimp-convert-grayscale、gimp-drawable-is-gray、gimp-image-convert-grayscaleの3つに絞られるので、簡単にgimp-image-convert-grayscaleを使えば良いとわかります。