python-fu で gimp バッチ処理

gimpのバッチ処理だとbimpが知られている。

のだけれど、script-fuやpython-fuでもバッチ処理はできる。bimpよりは、これらのほうが出来ることが多い。

script-fuはScheme系の言語でちょっぴり敷居を感じてしまう。ということでpython-fuでの例を探したので、メモしておく。 慣れないpythonだが、この手のもので必要に迫られれば使うかも。

例えばカレンドディレクトリにあるtifファイルからGimp形式 xcfに変換するだけの処理は以下のようなpythonコードになる:

#!/usr/bin/env python3

import os, glob

pwd = os.getcwd()

for src_file in glob.glob(os.path.join(pwd, "*.tif")):
    img = pdb.gimp_file_load(src_file, src_file)
    disp = pdb.gimp_display_new(img)
    dst_file = os.path.join(pwd, (os.path.splitext(os.path.basename(src_file))[0]+'.xcf'))
    pdb.gimp_file_save(img, img.active_layer, dst_file, dst_file)
    pdb.gimp_display_delete(disp)	

これを次のようにして呼び出す:

#!/bin/sh

 /cygdrive/c/Program\ Files/GIMP\ 2/bin/gimp-2.10.exe --console-messages --no-splash --no-data --batch-interpreter python-fu-eval --batch - < conv2xcf.py -b 'pdb.gimp_quit(1)'

これをtif2xcf.shなどと保存して実行も出来る。(--no-interfaceはうまく動かない。メモリリーク?的なエラーがでる。)

Windows上なので、ここではCygwinから呼び出すことにしてみた。

参考にしたページ

上記は以下の二つの記事のまんまを合体しただけ。

コマンドラインから実行するものは少なくて、プラグインを作成するものが多い。 プラグインでないものはgimp上でコンソールを開いてそこに流し込む系が多いようだ。