python-fuメモ
python-fuを弄っていると
プラグインがクラッシュしました。
という何やら致命的なメッセージに遭遇するが、
これはpythonの文法エラーレベルの問題のようだ。
こんな感じでコマンドラインでpythonに食わせてチェックする。
$ python layers.py File "layers.py", line 8 def each(layers, func, filter=lambda layer: True) ^ SyntaxError: invalid syntax
ありがちなことに関数定義の":"を忘れています。
(1時間に3回のペース)
なおすと
$ python layers.py Traceback (most recent call last): File "layers.py", line 6, in <module> import gimpfu ImportError: No module named gimpfu
となりgimpfuが無いよと言われる。
これが正常な状態。
今回作ったスクリプト。
#!/usr/bin/python # coding: utf8 """ レイヤー操作いろいろ """ import gimpfu def each(layers, func, filter): """ 順にfuncを適用する """ for layer in layers: if filter(layer): func(layer) def each_layer(img, func, filter=lambda layer: True): """ 上のレイヤから順にfuncを適用する """ img.undo_group_start() each(img.layers, func, filter) img.undo_group_end() def reversed_each_layer(img, func, filter=lambda layer: True): """ 下のレイヤから順にfuncを適用する """ img.undo_group_start() each(reversed(img.layers), func, filter) img.undo_group_end() ################################################################################ def python_visible_all(img, drawable): """ 全レイヤーを表示する """ each_layer(img, lambda layer: gimpfu.pdb.gimp_drawable_set_visible(layer, 1)) gimpfu.register( "python-fu-visible-all", "visible all layer", "visilbe all layer", "ousttrue <youcharmanums._{at}_.gmail.com>", "ousttrue", "2009", "<Image>/Layer/すべて表示", "*", [], [], python_visible_all ) ################################################################################ def python_invisible_all(img, drawable): """ 全レイヤーを非表示にする """ each_layer(img, lambda layer: gimpfu.pdb.gimp_drawable_set_visible(layer, 0)) gimpfu.register( "python-fu-invisible-all", "invisible all layer", "invisilbe all layer", "ousttrue <youcharmanums._{at}_.gmail.com>", "ousttrue", "2009", "<Image>/Layer/すべて非表示", "*", [], [], python_invisible_all) ################################################################################ def python_create_from_visible_layers(img, drawable): """ 表示中のレイヤーから新画像を作成する """ # create new_img=gimpfu.pdb.gimp_image_new(img.width, img.height, img.base_type) new_img.disable_undo() # copy reversed_each_layer(img, lambda layer: gimpfu.pdb.gimp_image_add_layer(new_img, gimpfu.pdb.gimp_layer_new_from_drawable(layer, new_img), 0), lambda layer: layer.visible) new_img.enable_undo() # display gimpfu.pdb.gimp_display_new(new_img) gimpfu.pdb.gimp_displays_flush() gimpfu.register( "python-fu-create-from-visible-layers", "create from visible layers", "create from visible layers", "ousttrue <youcharmanums._{at}_.gmail.com>", "ousttrue", "2009", "<Image>/Layer/表示中のレイヤーから新画像を作成", "*", [], [], python_create_from_visible_layers) ################################################################################ gimpfu.main()
gimpにもlayerグループ的なサムシングが欲しいな。