GIMPでPythonプラグインを作る:Getting Started

gimp-python-getting-started.png

簡単な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()

書いた文字列は画面下部に現れるよ
debug.png
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()

サポートサイト Wikidot.com