Gimp3のPython-fuでレイヤーを移動するプラグイン

玉洲習画帖 第5巻 コンピュータ
出典:国立国会図書館「NDLイメージバンク」(https://ndlsearch.ndl.go.jp/imagebank)

自分が必要な機能をプラグインで作るわけですが、無知ゆえにGIMPの標準機能に既にあるものを作ってしまう場合があり、こちらの移動プラグインはその典型。
せっかく作ってしまったので残しておきます。

レイヤーをトップへ移動するプラグイン

ファイル名:my-raise_layer_top/my-raise_layer_top.py

#!/usr/bin/env python3
# レイヤーをトップへ移動
import sys, gi, subprocess
import datetime, os, time
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp, GObject, Gio
PROC = "python-fu-raise-layer-top"
def run(proc, run_mode, image, drawables, config, data):
    # アクティブレイヤーの取得
    sel_layers = image.get_selected_layers()
    layer = sel_layers[0] if sel_layers else None
    if (layer is None):
        return proc.new_return_values(Gimp.PDBStatusType.EXECUTION_ERROR, None)
    image.raise_item_to_top(layer)
    Gimp.displays_flush()
    return proc.new_return_values(Gimp.PDBStatusType.SUCCESS, None)
class RunRaiseLayerTop(Gimp.PlugIn):
    def do_query_procedures(self):
        return [PROC]
    def do_create_procedure(self, name):
        if name != PROC:
            return None
        p = Gimp.ImageProcedure.new(self, name, Gimp.PDBProcType.PLUGIN, run, None)
        p.set_menu_label("Raise Layer Top")
        p.add_menu_path("<Image>/Filters/My")   # 画像を開いている時に表示
        p.set_documentation(
            "Raise Layer Top",
            "レイヤーをトップへ移動",
            "my-raise_layer_top.py"
        )
        p.set_attribution("Your Name", "Public Domain", "2025")
        # 画像が必要なメニュー配下なので image types を指定
        p.set_image_types("*")
        # 描画対象が選べる状態で有効化(最低限の感度)
        p.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE)
        return p
Gimp.main(RunRaiseLayerTop.__gtype__, sys.argv)

レイヤーをボトムへ移動するプラグイン

ファイル名:my-lower_item_to_bottom/my-lower_item_to_bottom.py

#!/usr/bin/env python3
# レイヤーをボトムへ移動
import sys, gi, subprocess
import datetime, os, time
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp, GObject, Gio
PROC = "python-fu-lower-item-bottom"
def run(proc, run_mode, image, drawables, config, data):
    # アクティブレイヤーの取得
    sel_layers = image.get_selected_layers()
    layer = sel_layers[0] if sel_layers else None
    if (layer is None):
        return proc.new_return_values(Gimp.PDBStatusType.EXECUTION_ERROR, None)
    image.lower_item_to_bottom(layer)
    Gimp.displays_flush()
    return proc.new_return_values(Gimp.PDBStatusType.SUCCESS, None)
class RunLowerLayerBottom(Gimp.PlugIn):
    def do_query_procedures(self):
        return [PROC]
    def do_create_procedure(self, name):
        if name != PROC:
            return None
        p = Gimp.ImageProcedure.new(self, name, Gimp.PDBProcType.PLUGIN, run, None)
        p.set_menu_label("Lower Layer Bottom")
        p.add_menu_path("<Image>/Filters/My")   # 画像を開いている時に表示
        p.set_documentation(
            "Lower Layer Bottom",
            "レイヤーをボトムへ移動",
            "my-lower_item_to_bottom.py"
        )
        p.set_attribution("Your Name", "Public Domain", "2025")
        # 画像が必要なメニュー配下なので image types を指定
        p.set_image_types("*")
        # 描画対象が選べる状態で有効化(最低限の感度)
        p.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE)
        return p
Gimp.main(RunLowerLayerBottom.__gtype__, sys.argv)

コメント