GIMPでPython-Fuを使った画像処理①
GIMPでPython-Fuを使った画像処理を試してみる。 まずはスクリプトをGIMPに登録して画像を読み込むところまで。 最終的にはオリジナルcross filterをpython-fuで実行できるようにしたい。
参考にしたサイト: qiita.com
環境:
手順は以下の通り。
- 1. python-fuのソースコードを置くフォルダのパスを確認
- 2. GIMPの起動モードをverboseに切り替え(やらなくても良い)
- 3. お試しスクリプトを作成、python-fu置き場に置く
- 4. GIMPを起動して画像を読み込み、実行
1. python-fuのソースコードを置くフォルダのパスを確認
gimpを起動し、メニューバーからアクセス 編集 > 設定 > フォルダー > スクリプト
ここに書いてあるパスにPython-Fuのソースコードを置くと、読み込まれる。 編集して好きなところにすることもできそう。
2. GIMPの起動モードをverboseに切り替え(やらなくても良い)
verboseモードにしておくと、うまくいかなかったときの助けになるかもしれない。 私はwindowsのタスクバーにGIMPのアイコンを登録しているので、 そこのショートカットのプロパティから実行時の引数を渡して設定した。 GIMPアイコンを右クリック > もう一度GIMPを右クリック > プロパティ GIMPプログラムのパスの最後に以下のオプションを追加。(""の外に書く)
--verbose --console-messages
3. お試しスクリプトを作成、python-fu置き場に置く
以下のプログラムを作成した。 ※画像サイズが大きいと処理に時間がかかるため、左上の(10x10 or 画像サイズ)の小さい方の画素のみアクセスしている。
# -*- coding: utf-8 -*- #################### # import #################### # gimpfu用 from gimpfu import * # ファイル入出力用 import sys #################### # parameters #################### # --verboseなら%USER_PROFILE%のパス、 # 通常起動なら.xcfファイルがあるパスに出力される OUTTXT_PATH = "stdout.txt" PW = 10 PH = 10 #################### # method #################### # 引数はregisterで登録するときに指定する。 # message: PF_STRING # image: PF_IMAGE # drawable: PF_DRAWABLE def plugin_main(message, image, drawable): # verboseモードだとコンソールに出力され、 # 通常モードだとエラーメッセージボックスとして表示される。 # messageには呼び出し時にhello worldを渡している。 gimp.message("Message: " + message) # ファイル書き出し用 sys.stdout = open(OUTTXT_PATH, 'w') # ファイルにピクセル値を書き出し w = min(PW, drawable.width) h = min(PH, drawable.height) src_rgn = drawable.get_pixel_rgn(0, 0, w, h, False, False) for x in xrange(0, w): for y in xrange(0, h): p = map(ord, src_rgn[x, y]) print x, ":", y, " -- ", "".join(map((lambda x: format(x, '02x')), p)) #################### # スクリプト登録 #################### # メニューバーの Filters > My にスクリプトを追加 prms = [ (PF_STRING, "string", "Text string", 'Hello, world!'), (PF_IMAGE, "image", "Input image", None), (PF_DRAWABLE, "drawable", "Input drawable", None) ] register( "cross_filter", # name "my cross filter", # blurb (宣伝文句), "help: this is my filter", # help "skattun", # author "(C) 2023 skattun", # copyright "2023/5/5", # date "cross_filter", # menupath(not use) "RGB*", # imagetypes prms, # params [], # results plugin_main, # function menu = "<Image>/Filters/My")# menu path設定 #################### # main #################### main()
登録する場所をFilters以下にすると、画像を開かないとスクリプトを実行できなくなる。以下のパスにするとメインメニューに登録され、 画像を開かなくても実行できるとのこと。(リンク参照)
menu="<Image>/PyPlgin"
このソースコードをhelloworld.pyという名前で保存してスクリプト置き場に保存
4. GIMPを起動して画像を読み込み、実行
お試し用の身代わり人形画像はこちら