Python-Fuで選択範囲を別レイヤーに切り出し

GIMP コンピュータ
GIMP

一枚の絵をパーツごとに切り出してレイヤー化する作業用に作成しました。
手動で実行する手順の自動化で、以前にも同じ目的のスクリプトを作りましたが別手順になります。

#!/usr/bin/env python
# coding: utf8

from gimpfu import *
from array import array

# 選択範囲で切り取り新規レイヤーにコピー

def plugin_main(image, layer):

    # 選択範囲が無い場合終了
    (non_empty,x1,y1,x2,y2) = pdb.gimp_selection_bounds(image)
    if (non_empty == 0):
        return 0

    # レイヤーにアルファチャンネルを追加
    pdb.gimp_layer_add_alpha(layer)

    # レイヤーのコピー
    new_layer = pdb.gimp_layer_copy(layer, 1)
    image.add_layer(new_layer, 0)

    # オフセット取得
    x0,y0 = pdb.gimp_drawable_offsets(new_layer)

    # レイヤーサイズの変更
    pdb.gimp_layer_resize(new_layer,x2-x1,y2-y1,x0-x1,y0-y1)

    # 選択範囲を反転
    pdb.gimp_selection_invert(image)
    
    # 透明色で塗りつぶし
    pdb.gimp_edit_fill(new_layer, 3)

    # 選択範囲を反転
    pdb.gimp_selection_invert(image)

    # 前傾色で塗りつぶし
    pdb.gimp_edit_fill(layer, 0)
    # 透明色で塗りつぶし
    #pdb.gimp_edit_fill(layer, 3)

    # 元レイヤーをアクティブに
    pdb.gimp_image_set_active_layer(image, layer)

    return 0



# フィルターに登録
register("CutToNewLayer", "", "", "", "", "",
    "CutToNewLayer", 
    "RGB*",
    [
    (PF_IMAGE, "image", "Input image", None),
    (PF_DRAWABLE, "drawable", "Drawable", None)
    ],
    [],
    plugin_main,
    menu = "<Image>/Filters/Languages/Python-Fu")

main()

スクリプトの内容(手動の手順)

1.範囲選択されていない場合終了

2.レイヤーにアルファチャンネルを追加

3.元のレイヤーをコピーする。

4.コピーしたレイヤーを選択範囲で切り抜き

5.元レイヤーの選択範囲を前景色で塗りつぶし

手動で実行している一連の作業をスクリプト化することで自動実行させます。

5.の前景色で塗りつぶしは切り出し作業の進捗確認様です。すべてのパーツを切り出すと元レイヤーはすべて前景色で塗りつぶされます。

4.の選択範囲で切り抜きは、レイヤーのメニューの同名項目と同じ処理をさせたかったので、プロシージャブラウザで該当プロシージャを探しました。
キーボードショートカットの設定で各種機能の名前が英名になっており、その用語をプロシージャブラウザで検索します。
選択範囲で切り抜きの場合layers-crop-to-selectionとなっていいました。
つたない英語力で”crop”や”cut”と”select”や”layer”などと絡めて探しましたが見つけることが出来ませんでした。しかたが無いので選択範囲の幅と高さ、相対位置を取得しレイヤーのサイズを変更させています。
もしかするとズバリのプロシージャがあるかもしれませんが、無いとするとこれぐらいはコードを書きなさいということなんでしょうか?

コメント