python-fu(番外編:種々雑多/ツール)
GIMP で python-fu を使おうとすると、
とりあえず動くスタートアップ用のドキュメント以外は
あまりにも少ない状況です。
選択した領域情報の取得、リスト化された画像ファイルのパスを順次開いて
処理を行うスクリプトの例を掲載しますので参考にしてください。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from gimpfu import *
#--------------------------------------------
# path で指定されたディレクトリ内の jpg/png
# ファイルをリストアップする。path が jpg/png
# ファイルの場合は、そのまま返す。
#--------------------------------------------
def image_list(path):
files = []
if os.path.isdir(path):
for item in os.listdir(path):
op = item.split(".")
if op[-1] == "jpg" or op[-1] == "png":
files.append(item)
files.sort()
return files
if os.path.isfile(path):
op = path.split(".")
if op[-1] == "jpg" or op[-1] == "png":
files = [path]
return flies
return []
#--------------------------------------------
# 現在開いている画像で選択された領域の内容を
# リストアップされた画像ファイルに対し順次貼
# り付けて保存する
#--------------------------------------------
def pcopy(image, drawable, indir, outdir):
# 選択された領域の情報を取得する。
sel, x1,y1, x2,y2 = \
pdb.gimp_selection_bounds(image)
if not sel:
pdb.gimp_message("selection is none")
quit()
# 選択された領域をバッファーにコピーする。
area = pdb.gimp_edit_copy(drawable)
# Windows でCドライブ以外のファイルに対し
# て処理を行う場合は次の行のようにドライブ
# を変更する。
# os.chdir("E:\\")
imgs = image_list(indir)
for name in imgs:
# 入力用と出力用ファイルを開く
inpath = os.path.join(indir, name)
oupath = os.path.join(outdir, name)
# 画像をひとつ開く
img = pdb.gimp_file_load(inpath, "")
# アクティブレイヤー取得
layer = \
pdb.gimp_image_active_drawable(img)
# バッファーの内容を貼り付ける
floating = \
pdb.gimp_edit_paste(layer,area)
# 貼り付け位置を指定する
pdb.gimp_layer_set_offsets(
floating, x1,y1)
# フローティングレイヤーの固定
pdb.gimp_floating_sel_anchor(floating)
# 保存
pdb.gimp_file_save(img,
img.active_layer,oupath,"")
# メモリの開放
pdb.gimp_image_delete(img)
#--------------------------------------------
# 以下は「雑多情報」TOPの参考図書参照。
#--------------------------------------------
register(
"part-copy",
"List up files in specified directory",
"List up files in specified directory",
"S.N.",
"S.N.",
"May 2019",
# "/Image/Original/part copy",
"/Filters/Languages/Python-Fu/pcopy",
"*",
[
(PF_DIRNAME,"indir","in-dir",
"/home/sn/Pictures"),
(PF_DIRNAME,"outdir","out-dir",
"/home/sn/output")
],
[],
pcopy
)
#--------------------------------------------
main()
※ 2020/01/17: メモリの開放
pdb.gimp_image_delete(img)
を追加