GIMPのPython-Fuでレイヤーを二つ追加するプラグイン

GIMP コンピュータ
GIMP

GIMPで境界線(Line)と塗りつぶし(Paint)用に2つレイヤーを追加するプラグインを作りました。

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

from gimpfu import *
from array import array

# レイヤーを二つ追加

def plugin_main(image, layer):
    # サイズ
    w = image.width
    h = image.height
    # レイヤーの位置を取得
    pos = pdb.gimp_image_get_item_position(image, layer)
    # paintレイヤーの生成
    paint_layer = pdb.gimp_layer_new(image,w,h,layer.type_with_alpha,'Paint',100,0)
    # paintレイヤーの追加
    pdb.gimp_image_insert_layer(image, paint_layer, None, pos)
    # paintレイヤーの位置を取得
    pos = pdb.gimp_image_get_item_position(image, paint_layer)
    gimp.message("{0} {1}".format(paint_layer.name, pos))
    # レイヤーの生成
    line_layer = pdb.gimp_layer_new(image,w,h,layer.type_with_alpha,'Line',100,0)
    # レイヤーの追加
    pdb.gimp_image_insert_layer(image, line_layer, None, pos)
    #gimp.message("{0}".format(AddPaintLayer))
# フィルターに登録
register("AddTwoLayer", "", "", "", "", "",
    "AddTwoLayer", 
    "*",
    [
    (PF_IMAGE, "image", "Input image", None),
    (PF_DRAWABLE, "drawable", "Drawable", None)
    ],
    [],
    plugin_main,
    menu = "<Image>/Filters")
main()

実行すると以下のようにレイヤーが追加されます。

・フィルター実行前

・フィルター実行後

枠線を引いて内部を塗潰そうとすると、アンチエイリアスの1px分隙間が生じます。選択範囲を1px拡張すると隙間なく塗りつぶすことができますが、アンチエイリアスが塗りつぶされるのでジャギーが目立つようになります。

Line(境界線)レイヤーに枠線を描き、Paint(塗りつぶし)レイヤーで枠線内をファジー選択、選択範囲を1px拡張、塗りつぶし作業を繰り返し一連の作業が終わりましたら各レイヤーを合成して一枚のレイヤーを作成します。少し面倒ですが、枠線との間に隙間なく塗りつぶすことが出来ます。

よく行う定型作業ですのでスクリプトを作成してみました。

コメント