GIMP Python-Fu ファイル出力&APIとプロシージャ

前回は、無料の画像編集ソフト 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 関数で指定している関数) が呼び出されます。

GIMP Python-Fu 自作スクリプトをメニューから呼び出し必要な引数を入力してもらいOKボタンで関数を実行します.

実行すると指定した 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 のバージョンに注意しましょう。

GIMP API 2.0 系リファレンスですが、最新版 2.10.34 に対応しています。
<a rel=
GIMP Base Library Reference Manual: GIMP Base Library Reference Manual
" class="wp-image-4311"/>

API はいくつかのカテゴリに分けられていますが、画像を扱う関数を調べたい場合は GIMP API のリンク先に GimpImage など画像を扱う関数のリンクがあります。

GIMP API 2.0 用のリファレンスの GIMP Library のリンク先では Image の操作関数などが参照できます.
<a rel=
GIMP Developer - Reference for GIMP 2.0 API
" class="wp-image-4314"/>

GimpImage を選ぶと、Image を対象とする多くの関数が参照できます。

GIMP GIMP Library(2.0)の GimpImage では画像を操作する多くの関数が参照できます.
<a rel=
gimpimage: GIMP Library Reference Manual
" class="wp-image-4315"/>

プロシージャとの関連

API リファレンスで紹介されている関数名で、 Python-Fu で使えるプロシージャ―を検索すると、同じ名前の関数が多く出てきます。
たとえば、先ほどの関数リストの一番目にある gimp_image_list もプロシージャ―に同名のものがありました。

このことから、 API を Python から呼び出すためのラッパー関数が多くあると思われます。
そのおかげで、 Python で GIMP の API を簡単に利用できるようになっています。

GIMP 2.0 系 API の関数名と同じものが Python-Fu のプロシージャーで見つけられました.

まとめ

今回は、無料の画像編集ソフト GIMP の Python-Fu で自作プラグインを作成し、メニュー選択時に入力してもらったファイルパスのファイルを作成しテキストを書き込む処理の例を紹介しました。
また、GIMP が提供するたくさんの API (2.0 系) のリファレンスのサイトを紹介し、その中にある関数を Python-Fu で用いるための同名のプロシージャーが多数提供されていることもわかりました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました