先日公開した、ImageJ スタック形式 RGB TIFF ファイルの GIMP 読み込みプラグインに関するコード解説です。
------------
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 以上2行は、GIMP上でpython プログラムを走らせる宣言と、プログラム内で UTF-8 コードを使う宣言です。
from gimpfu import *
import os, glob
# 本プラグインで使うライブラリの読み込み。gimpfu は GIMP 2.10.x で python プラグインを描くときに必須ですが、2.99.x 以降はサポートされません。
# 以下、プログラムの実質的な本体 do_merge_rgb をこの本体の関数名としています。引数として、読み込みファイル名である imgfname を取ります。この関数名は他のプラグインに使われている名前とバッティングしても構いません。
def do_merge_rgb(imgfname) :
image = pdb.gimp_file_load(imgfname, "")
# imgfname で指定したファイルを image というイメージに読み込みます。
image.filename = imgfname + "_.xcf"
#読み込んだファイル名に _.xcf をつけた名前にファイル名を変更。
disp = pdb.gimp_display_new(image)
# img をGIMP上で表示します。このように明示的に表示を指定しないとファイルをイメージに読み込んでも表示されません。
pdb.gimp_edit_copy(image.layers[0])
# imege の1番目のレイヤーをコピーします。
blue = pdb.gimp_edit_paste_as_new_image()
# コピーしたレイヤーを blue という新しいイメージとして貼り付けます。
pdb.gimp_edit_copy(image.layers[1])
# imege の2番目のレイヤーをコピーします。
green = pdb.gimp_edit_paste_as_new_image()
# コピーしたレイヤーを green という新しいイメージとして貼り付けます。
pdb.gimp_edit_copy(image.layers[2])
# imege の3番目のレイヤーをコピーします。
red = pdb.gimp_edit_paste_as_new_image()
# コピーしたレイヤーを red という新しいイメージとして貼り付けます。
compose = pdb.plug_in_compose(red, image.layers[0], green, blue, blue,"RGB")
# "image.layers[0]" & second "blue" for dummy parameters
# red, green, blue を RGB合成し、compose というイメージに落とします。 2番目の引数、"image.layers[0]" と5番目の blue はダミーのパラメータです。というのは、pdb.plug_in_compose API は、2番目の引数に drawable を指定する仕様になっていますが、実際には使わない仕様となっているようです。しかし、一応指定しておかなければならないのでダミーで入れています。また5番目の引数は、4番目の合成イメージ (おそらくアルファチャンネル) を入れなければならないようなので、ダミーで blue を入れています。
compose.filename = imgfname + "_RGBmerged.xcf"
# compose にオリジナルファイル名 + "_RGBmerged.xcf" というファイル名をつけます。
disp = pdb.gimp_display_new(compose)
# compose を表示します。
drawable = pdb.gimp_image_get_active_layer(compose)
# TIFF ファイルとして保存する際に drawable を取得しておくことが必要なので、compose のアクティブレイヤーを drawable として取得しておきます。
pdb.file_tiff_save(compose, drawable, imgfname + "_RGBmerged.tif", imgfname + "_RGBmerged.tif", 3)
# compose をオリジナルファイル名 + "_RGBmerged.tif" という名前で、TIFF ファイルとして保存します。 pdb.file_tiff_save の引数ですが、最初から、TIFF ファイルとして保存するイメージ名、保存する drawable 名、ファイル名、raw ファイル名、圧縮指定で、圧縮指定は defrate (3) を指定しています。
#rawファイル名とは、Python 上でエスケープシーケンスとして認識されてしまうような文字を含んだファイル名で、通常はファイル名と rawファイル名は同じことが多いですが、Windows上でフォルダ名を含んで保存する場合は、ちゃんと区分して指定する必要が出てきます。例えば下記のサイトなどをご参照ください。
www.javadrive.jp return
# メインの関数の終了です。
# 以下メニュー登録用の register 関数です。
register(
"ImageJ_Multi_Page_TIFF_to_RGB_Merged", #→プラグインコマンド名。 他のプラグインとバッティングしない名前を付ける必要があります。バッティングしていると、正しく GIMP に読み込まれません。なお、上のdef で定義される関数名と異なっていても構いません。
"RGB Merge for ImageJ multi page TIFF", #→プロシジャーブラウザに表示するプラグインの説明
"RGB Merge for ImageJ multi page TIFF", #→プラグインのhelpで表示する説明 上と同一で可
"Ohnishi, Yasuo", # →プラグイン著者名
"Public Domain", # → 著作権表示
"2023 Ver 0.1", # 製作年等
"ImageJ RGB TIFFファイル読込...", # → メニュー表示名
"", # Alternately use RGB, RGB*, GRAY*, INDEXED etc.
# ここは、画像形式を指定しますが、指定しないので、"" を入れています。
[
(PF_FILE, "imgfname", "Select Original Image file", ""), # → プラグインに与えるパラメーター。このプラグインを起動したときに、"Select Original Image file" というダイアログが開きます。
],
[],
do_merge_rgb, menu="<Image>/File/Open" ) # メインとなる関数名(上の def で定義した名前)を指定し、さらに メニュー上の位置指定を行います。
main()
------------