前回は、無料の画像編集ソフト GIMP の Python-Fu で自作したプラグインをメニューから呼び出し、引数パラメータで指定したファイルパスの文字列を受け取るように実装しました。
前回の記事:GIMP Python-Fu 自作スクリプトでファイル選択の結果を受け取る | Compota-Soft-Press
今回は、引数で受け取ったファイルパスにファイルを作成し、テキストを出力する Python-Fu スクリプトの処理を紹介します。
また、画像処理のスクリプトを書く必要がなくなった(GIMP のヒストグラムダイアログで十分とわかった)ためそちらについては実装しませんが、その過程で調べた GIMP の API と、pdb でアクセスできる数百に及ぶプロシージャとの関係についても紹介します。
※ GIMP のバージョンは 2.10.34 です。
GIMP Python-Fu でのテキストファイル出力
プラグインフォルダ―に以下の「sc_output_color_code_rect.py」を UTF-8 形式で保存します。
その後 GIMP を起動し、メニューに追加された「SakuraCrowd」→「sc_output_color_code_rect」を選択します。
※画像が必要なので、メニュー「ファイル」→「画像を作成」などで用意してください。
#!/usr/bin/python
# -*- coding: utf-8 -*-
from gimpfu import *
def main_sc_log_color_code_rect(image, drawable, filename):
"""main 関数の処理"""
pdb.gimp_message('hello Python-Fu Plugins! filename = ' + filename)
with open(filename, "a") as hfile: # a はファイルがあれば追加。 x はあればエラー。 w はあれば上書き。
hfile.write("Hello, TextFile") # ファイルにテキストを追記。
register(
"sc_log_color_code_rect", #プロシージャの名前
"Logs the color codes of the pixels in the specified rectangle. 指定矩形内のピクセルのカラーコードをログ出力します。", #プラグインの情報
"Logs the color codes of the pixels in the specified rectangle. 指定矩形内のピクセルのカラーコードをログ出力します。", #詳しいプラグインの情報
"SakuraCrowd", #プラグインの著者
"SakuraCrowd", #コピーライト
"2023/04", #日付
"sc_log_color_code_rect", #メニューに表示するプラグイン名
"RGB", #画像タイプ https://gimpbook.com/scripting/notes.html
[
(PF_IMAGE, "image", "_Input image", None),
(PF_DRAWABLE, "drawable", "Input _Drawable", None),
(PF_FILENAME, "filename", "Color Code csv _File", "")
], #引数
[], #戻り値
main_sc_log_color_code_rect, # main 関数名
menu="<Image>/SakuraCrowd" #プラグインの登録場所
)
main()
9 行目の open 関数でファイルを開きます。指定した ‘a’ オプションは、ファイルがなければ新規作成、あれば追記します。
10 行目の write 関数で開いたファイルにテキストを描きこんでいます。
with ~ as 構文で作成されたファイルハンドル hFile は、そのブロックから抜ける際に自動的に close 関数と同様の跡片付けをしてもらえます。
後半の register 関数は、このプラグインの説明や、引数・戻り値の設定をしています。
引数の3番目に指定した filename は、プラグインのメニューを選択した直後に GIMP が自動的に作ったダイアログで入力できます。
ファイルパスを指定したら、 OK ボタンでプラグインの関数を呼び出します。先ほどのコードの 6 行目の main_sc_log_color_code_rect 関数 (register 関数で指定している関数) が呼び出されます。
実行すると指定した test.txt が作成され、先ほど設定したテキストが書き込まれていました。
GIMP の API
GIMP では、画像を作成・参照・編集・削除するなどの機能を API として提供しています。
GIMP API などで検索するとすでに次期バージョンである 3.0 の API のリファレンスも公開されています。
現在利用している GIMP のバージョンは 2.10.34 なので GIMP 2.0 系のリファレンスを見てみましょう。
GIMP 2.10 API のリファレンス
GIMP 2.10 で利用できる API は「GIMP Developer – Reference for GIMP 2.0 API」に記載されています。
※リファレンスに書かれている API の中には 最新版で追加されたものもあるかもしれないので、利用する場合は使用する GIMP のバージョンに注意しましょう。
API はいくつかのカテゴリに分けられていますが、画像を扱う関数を調べたい場合は GIMP API のリンク先に GimpImage など画像を扱う関数のリンクがあります。
GimpImage を選ぶと、Image を対象とする多くの関数が参照できます。
プロシージャとの関連
API リファレンスで紹介されている関数名で、 Python-Fu で使えるプロシージャ―を検索すると、同じ名前の関数が多く出てきます。
たとえば、先ほどの関数リストの一番目にある gimp_image_list もプロシージャ―に同名のものがありました。
このことから、 API を Python から呼び出すためのラッパー関数が多くあると思われます。
そのおかげで、 Python で GIMP の API を簡単に利用できるようになっています。
まとめ
今回は、無料の画像編集ソフト GIMP の Python-Fu で自作プラグインを作成し、メニュー選択時に入力してもらったファイルパスのファイルを作成しテキストを書き込む処理の例を紹介しました。
また、GIMP が提供するたくさんの API (2.0 系) のリファレンスのサイトを紹介し、その中にある関数を Python-Fu で用いるための同名のプロシージャーが多数提供されていることもわかりました。
参照サイト Thank You!
- GIMP – GNU Image Manipulation Program
- GIMPのPython-Fuでオレオレフィルタを書くためのあれこれ – Qiita
- Pythonのデータ型(コレクション編) – Python Boot Camp Text ドキュメント
- 3.4. はじめての Script-Fu スクリプト
- Script-Fu – GizmoLabs – だいたい CAD LISP なサイト
- Python | テキストファイルへ書き込む
- GIMP Developer – Reference for GIMP 2.0 API
- GIMP Library Reference Manual: GIMP Library Reference Manual
- Gimp – 3.0 (今は 2.0 系を扱っています)
記事一覧 → Compota-Soft-Press
コメント