とりあえずまとめておこう。
以下、Ubuntu上でのお話なのでWinやMacな人は知らない。
Python-fuを使うにあたってつまづいたこといろいろ。
日本語が使えない
バッチによる起動方法:
gimp --no-interface --batch '(python-fu-console-echo RUN-NONINTERACTIVE "another string" 777 3.1416 (list 1 0 0))' '(gimp-quit 1)'
→動かねー
-
-
- IBMでのご紹介(いつのバージョンで動かしたのやら)
-
gimp -i -b '(python-fu-resize "myimage.png" 200 200 TRUE)' -b '(gimp-quit 0)'
→動かねー。--verboseつけて見てたら、script-fu経由呼び出しに成っている模様。
-
-
- 結局ググって見つけた方法(processWaker.py)
-
gimp --no-interface --console-messages --no-data --no-splash --batch-interpreter python-fu-eval --batch - < ./mansiki/processWaker.py
バッチ起動時の注意点
registされた関数の呼び出し。
- 通常のGUIモードで使用するために書いたモジュールの呼び出し方法、この方法は基本GUI経由で呼び出すものはこれだけと割りきっておいた方がいいかも。
バッチ起動時の暫定的な考え方
以下サンプル
./mansiki/processWaker.py
#!/usr/bin/python # coding: UTF-8 import sys,gimpfu sys.path.insert(1, './mansiki') import callProcess def python_fu_make_img_ng(img, drawable): pass callProcess.executeMultiProcess() gimpfu.pdb.gimp_quit(1);
./mansiki/callProcess.py
#!/usr/bin/python # -*- coding: utf-8 -*- import os,sys from Queue import Queue sys.path.insert(1, './mansiki') num_worker_threads =2 cmd = "gimp --no-interface --console-messages --no-data --no-splash --batch-interpreter python-fu-eval --batch - < ./mansiki/makeImage.py " print 'os.getpid():'+str(os.getpid()) print 'os.getppid():'+str(os.getppid()) import threading # Queue class AsyncCall(threading.Thread): def __init__(self, q): threading.Thread.__init__(self) self.q = q def run(self): while True: item = self.q.get() print item os.system(item) self.q.task_done() def executeMultiProcess(): q = Queue(0) source=[cmd,cmd,cmd,cmd] for item in source: q.put(item) print item for i in range(num_worker_threads): task = AsyncCall(q) task.start() q.join() #
./ImageMake.py
#!/usr/bin/python # -*- coding: utf-8 -*- import sys sys.path.insert(1, '/usr/lib/gimp/2.0/python') import gimpfu,time from datetime import date def hello_world(): gimpfu.pdb.gimp_message("hello world!") dst="/home/alfx61/img" image = gimpfu.pdb.gimp_image_new(120,120,0) layer = gimpfu.pdb.gimp_layer_new(image,120,120,0,"test",0,0) now = date.today() filename=dst+"/"+now.strftime("%Y%m%d%H%M%S")+str(time.time())+"A.png" gimpfu.pdb.file_png_save_defaults(image, layer, filename, filename) gimpfu.pdb.python_fu_hello_world(None,None) pass hello_world(); gimpfu.pdb.gimp_quit(1);
./mansiki/processWaker.py
#!/usr/bin/python # coding: UTF-8 import gimpfu from datetime import date def python_layer_splitter(img, drawable, dst): # each layer image = gimpfu.pdb.gimp_image_new(120,120,0) layer = gimpfu.pdb.gimp_layer_new(image,120,120,0,"test",0,0) now = date.today() filename=dst+"/"+now.strftime("%Y%m%d%H%M%S")+".png" gimpfu.pdb.file_png_save_defaults(image, layer, filename, filename) gimpfu.register( # nameimage "python-fu-Image-Make", # blurb "python-fu Image Make", # help "make png files namede by time", # author "ryunosinfx <ryunosinfx._{at}_.goo.ne.jp>", # copyright "public domain", # date "2009", "<Image>/Python-Fu/ImageMake...", # imagetypes "", # params [ ( # ディレクトリ選択、 変数名、ラベル、初期値 gimpfu.PF_DIRNAME, "arg0", "出力ディレクトリ", "" ) ], # results [], # function python_layer_splitter) gimpfu.main()