Python-Fuレイヤーの不透明部分の縁を透明化

GIMP コンピュータ
GIMP

GIMPでレイヤー上の不透明部分の縁を数ピクセル分白色を透明化する作業をスクリプト化してみました。

#!/usr/bin/env python
# coding: utf8
from gimpfu import *
from array import array
from time import time
def plugin_main(image, layer, grow_step):
    # レイヤーの幅と高さを取得
    w = layer.width
    h = layer.height
    # 不透明部分を選択範囲に
    pdb.gimp_image_select_item(image, 2, layer)
    # 選択範囲の反転
    pdb.gimp_selection_invert(image)
    # 範囲選択を拡大
    if grow_step > 0:
        pdb.gimp_selection_grow(image, grow_step)
    # 色を透明度に
    pdb.plug_in_colortoalpha(image, layer, (255,255,255,1.0))
    # レイヤーの更新
    layer.flush()
    layer.update(0,0,w,h)
register("FuchiToumei", "", "", "", "", "",
    "縁を透明化", 
    "*",
    [
    (PF_IMAGE, "image", "Input image", None),
    (PF_DRAWABLE, "drawable", "Drawable", None),
    (PF_INT32, "grow_step", "領域拡大するサイズ", 2),
    ],
    [],
    plugin_main,
    menu = "<Image>/Filters")
main()

人物画像などからパーツごとにレイヤー分けする作業で使用します。
切り出したパーツの縁の部分が他のパーツや背景等に重なる場合、アンチエリアス等が見えると見栄えが悪くなる場合があるので、その部分を透明化することで重ね合わせた際の違和感を緩和します。

内容として、レイヤーの可視部分を範囲として選択→選択範囲の反転→選択範囲を拡大→透明化の手順になります。
手動だと少し手順が多く、反転後の選択範囲の拡大で頭が混乱しがちになりますので、フィルターとして呼び出せるスクリプトにしてみました。

コメント