公開日: 2019年5月2日

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) を追加