モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

gimpで「可視ピクセルからレイヤを得る」

久々にgimpを使ってみました。

kritaではモデファイア押下+マウスクリックで「カーソル直下の可視ピクセルが所属するレイヤをアクティブ」にすることができます。地味に便利。

しかしgimpでは…不可能では無い。移動ツールで「つかんだレイヤーまたはガイドを移動」オプションが入っていれば、移動ツールでそのピクセルをクリックした時に対応するレイヤがアクティブになります。

でもこれ、クリックするだけだとそのレイヤが一瞬アクティブになるだけなのですね。実際に移動しないとフォーカスがレイヤにあたらない。

正確に移動し直すとか、名前を確認して後でアクティブ…それも面倒です。

プラグインで実現できなくもないのです。pdbにはgimp-image-pick-correlate-layer()があり、任意の座標の可視ピクセルのレイヤを得ることが出来ます。

でも、プラグインではカーソル位置を取得する方法が無い(´・ω・`)

そこで無い脳味噌を回転させて思いつきました。

選択領域で代用すればエエやん?っと。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-


from gimpfu import *

#-----------------------------------------------------------------------
def python_fu_search_layer_from_pixel(a_img,a_drawable,direction=True):


    exists,sx,sy,ex,ey=pdb.gimp_selection_bounds(a_img)

    if exists:
        tl=pdb.gimp_image_pick_correlate_layer(a_img,sx,sy)
        if tl:
            pdb.gimp_image_set_active_layer(a_img,tl)
            gimp.message("レイヤ名「%s」が見つかりました" % tl.name)
        else:
            gimp.message("レイヤが見つかりませんでした")

    pdb.gimp_selection_none(a_img) # 処理後、選択領域を消す



register(
        "python_fu_search_layer_from_pixel",
        "search-layer-from-pixel",
        "選択領域左上隅の真下にある画素が所属するレイヤを得てアクティブにする",
        "dothiko",
        "dothiko",
        "2015",
        "<Image>/Python-Fu/layer/search-layer-from-pixel",
        "RGB*,GRAY*",
        [
        ],
        [],
        python_fu_search_layer_from_pixel)



main()




if __name__ == '__main__':

    pass

これをctrl+pに割り当てて使っています。何か消し忘れピクセルなんかあって、それがとっちらかっている場合…非常に便利です。