GIMPでPythonプラグインを作る:Getting Started
最終更新日19 Oct 2014 07:14
簡単なGIMPプラグインの作り方
「編集」→「環境設定」→「フォルダ」→「プラグイン」
でわかる「スクリプトの設置場所」に試しにtest.pyというファイルを作ってみる。
#coding: UTF-8 from gimpfu import * def plugin_main(timg, tdrawable): pdb.gimp_message("Miffy sora") register( "python_fu_resize",#Procedure Name "Saves the image at a maximum width and height", "Saves the image at a maximum width and height", "Miffy Sora",#著者の名前 "Miffy Sora",#著作権保持者の名前 "2013",#著作権の年 "<Image>/Image/test.py...",#メニューでの名前<Image>って紛らわしいけど、メニューという意味です。メニューのルートになります。/Imageで画像メニューの下に入ります "RGB*, GRAY*",#画像のタイプ [],#引数 [],#戻り値 plugin_main)#関数名 main()
書いた文字列は画面下部に現れるよ

register()関数についてはここ
そして、GIMPをリスタートする。
そうしたら、メニューバーの「画像」の下に「Resize to max…」と出てきたら、ok!
register メソッドに値を入力したら、スクリプトを保存します。
メニューのどこにスクリプトを埋め込みたいかは、詳しくはここのページを参考に
プラグイン関数の法則
プラグインの関数の最初は、
def 関数名(IMAGE,drawable(レイヤーとか))
に決まっているようだ。
第1引数は、現在の画像
第2引数はdrawable objectでレイヤーやチャンネルなどである。
本当は第0引数がある。それはrun mode
run modeでは以下の2つが可能
- "RUN-NONINTERACTIVE"
- "RUN-INTERACTIVE"
それ以降の引数は、register()の第9引数で指定して、増やせる。
もし、<Toolbox>メニューにぶらさげるプラグインにするなら、引数はrun modeだけでokらしい。
書くときの注意
- 関数の名前を書くときハイフン-を使ってはいけない。
かわりにアンダーライン_にすること。
- 他のスクリプトと関数名がかぶってるのはダメ
画像を上下逆さまにする簡単スクリプト
from gimpfu import * def plugin_main(img, tdrawable): pdb.gimp_image_flip(img, ORIENTATION_VERTICAL) register( "python_fu_resize", "Saves the image at a maximum width and height", "Saves the image at a maximum width and height", "Miffy Sora", "Miffy Sora", "2013", "<Image>/Image/Miffy test.py", "RGB*, GRAY*", [], [], plugin_main) main()
簡単なリサイズスクリプトにしてみる
これじゃあ何も起きなくてつまらないので、
画像サイズが500以上だったらリサイズするスクリプトにしてみましょう
from gimpfu import * def plugin_main(timg, tdrawable, maxh=500, maxw=500): currentWidth = tdrawable.width currentHeight = tdrawable.height newWidth = currentWidth newHeight = currentHeight if (maxw < newWidth): newWidth = maxw newHeight = (float(currentHeight) / (float(currentWidth) / newWidth)) if (maxh < newHeight): newHeight = maxh newWidth = (float(currentWidth) / (float(currentHeight) / newHeight)) pdb.gimp_image_scale(timg, newWidth, newHeight) register( "python_fu_pytest", "Does something", "Does something terribly useful", "Miffy Sora", "Miffy Sora", "2013", "<Image>/Image/Pytest.py.", "RGB*, GRAY*", [ (PF_INT, "max_width", "Maximum Width", 500), (PF_INT, "max_height", "Maximum Height", 500), (PF_BOOL, "copy", "Make a JPEG copy", TRUE), ], [], plugin_main) main()