2012/08/06(月) [n年前の日記]
#1 [gimp] GIMP 2.8上でPython-fuを勉強中
以下のページを参考にしながら勉強中。
_Get sublayers from group layer with Python in Gimp - Stack Overflow
_マクロで始める実用プログラミング - Part3 フリーの画像ソフトGIMPをPythonで自在に操る:ITpro
_python-fuを使った画像レイヤ情報の取得方法 - 風日記
もしかすると、バージョンチェックは以下でできるかもしれず?
ダイアログの指定時に、複数の選択肢の中から1つ選ぶ、という入力欄を使いたいのだけど…。Script-fu なら SF-OPTION だから、おそらく Python-fu では PF_OPTION になるのだろう。と思ったけど、 _GIMP Python Documentation には書いてない…。
_No PF_OPTION in Python-fu?? に、PF_OPTION を使っている事例があった。どうもよくわからんが、おそらくは、
_Get sublayers from group layer with Python in Gimp - Stack Overflow
_マクロで始める実用プログラミング - Part3 フリーの画像ソフトGIMPをPythonで自在に操る:ITpro
_python-fuを使った画像レイヤ情報の取得方法 - 風日記
# 最初に必要? >>> from gimpfu import * # GIMPのバージョンを取得 >>> version = pdb.gimp_version() >>> version '2.8.0' # 現在GIMPで開いている画像のリストを得る >>> gimp.image_list() [<gimp.Image 'test.xcf'>] # 1番目の画像情報?を取得 >>> image = gimp.image_list()[0] >>> image <gimp.Image 'test.xcf'> # 画像内の全レイヤーの一覧を、おそらくは Item と呼ばれる情報の形で取得 >>> image.layers [<gimp.GroupLayer 'レイヤーグループ'>, <gimp.Layer 'レイヤー'>, <gimp.Layer '背景'>] # レイヤー枚数とレイヤーIDのリスト、の形でも取得できる # レイヤーIDと、Item情報は、異なる情報らしい。 >>> num_layers, layer_ids = pdb.gimp_image_get_layers(image) >>> num_layers 3 >>> layer_ids (5, 10, 11) # gimp.Item.from_id(ID番号) で、Item 情報を取得できるっぽい? # GIMP 2.8 ではコレが使えるけど、GIMP 2.6 ではエラーになる。 >>> item = gimp.Item.from_id(layer_ids[0]) >>> item <gimp.Layer 'レイヤーグループ'> # そのレイヤーが、レイヤーグループなのか調べる # 1 ならレイヤーグループ。0 なら通常レイヤー。 >>> group = pdb.gimp_item_is_group(item) >>> group 1 # レイヤーグループには子供レイヤーが居る。 # pdb.gimp_item_get_children(item) で、レイヤー枚数とIDリストを得られる。 >>> num_children, child_ids = pdb.gimp_item_get_children(item) >>> num_children 3 >>> child_ids (6, 8, 9) # 子供レイヤーの1番上を取得 >>> item = gimp.Item.from_id(child_ids[0]) >>> item <gimp.Layer 'TEXT LAYER'> # レイヤーグループか調べる >>> pdb.gimp_item_is_group(item) 0 # 子供レイヤーの2番目を取得 >>> item = gimp.Item.from_id(child_ids[1]) # 指定したレイヤーをアクティブに >>> pdb.gimp_image_set_active_layer(image, item) # 現在アクティブになっているレイヤーの、 # レイヤー名、左上座標、幅、高さ、を取得 >>> pdb.gimp_layer_get_name(item) '\xe3\x83\xac\xe3\x82\xa4\xe3\x83\xa4\xe3\x83\xbc #2-with-dropshadow' >>> pdb.gimp_drawable_offsets(item) (269, 60) >>> pdb.gimp_drawable_width(item) 160 >>> pdb.gimp_drawable_height(item) 222 # Python-fu なら、もっと簡単に、 # レイヤー名、左上座標、幅、高さを取得できるらしい…? >>> layers = image.layers >>> layers [<gimp.GroupLayer 'レイヤーグループ'>, <gimp.Layer 'レイヤー'>, <gimp.Layer '背景'>] >>> layers[1].name '\xe3\x83\xac\xe3\x82\xa4\xe3\x83\xa4\xe3\x83\xbc' >>> layers[2].name '\xe8\x83\x8c\xe6\x99\xaf' >>> layers[1].offsets (0, 0) >>> layers[2].offsets (0, 0) >>> layers[2].width 512 >>> layers[2].height 512
もしかすると、バージョンチェックは以下でできるかもしれず?
>>> pdb.gimp_version() '2.8.0' >>> pdb.gimp_version().startswith("2.4.") False >>> pdb.gimp_version().startswith("2.6.") False >>> pdb.gimp_version().startswith("2.8.") Trueしかし、Python の仕様によっては上手くいかないかも。その行を通過しなくても、存在しない関数名がスクリプト中に書いてあるだけでエラーを出すなら、2.6と2.8で共用できるスクリプトを書くのは難しいかもしれない。そのあたりどういう仕様になってるかわからんけど。
ダイアログの指定時に、複数の選択肢の中から1つ選ぶ、という入力欄を使いたいのだけど…。Script-fu なら SF-OPTION だから、おそらく Python-fu では PF_OPTION になるのだろう。と思ったけど、 _GIMP Python Documentation には書いてない…。
_No PF_OPTION in Python-fu?? に、PF_OPTION を使っている事例があった。どうもよくわからんが、おそらくは、
(PF_OPTION, "file_type" ,("File type: "), 0 ,[".jpg", ".png", ".tif", ".pcx", ".xcf", ("all registered formats")]), ↓ (PF_OPTION, 変数名文字列, 項目名, 0, ["hoge", "fuga", "piyo"]),じゃないかしら。変数に入ってくる値は、0,1,2, 等なのだと思う。たぶん。自信無いけど。
[ ツッコむ ]
以上です。