前回、Gimp で python のコードが実行できることがわかったので、
今度はレイヤーの結合をしてみる。
↓新規レイヤーを作るpythonコードはこちらを参照。
レイヤーの結合には、
Gimp PDB のドキュメントに、「gimp_image_merge_down」という関数があった。
どういうものかイマイチわからなかったので、いろいろ試してみた。
まずは、レイヤーを3つ作ってみた。
image = create_image(500, 500) layer1 = add_layer(image, "背景1",250,250,1) draw_rect(layer, 0, 0, 250, 250) layer2 = add_layer(image, "背景2",300,300,2) draw_rect(layer2, 0, 0, 300, 300) layer3 = add_layer(image, "背景3",500,500,0) draw_rect(layer3, 0, 0, 400, 400) // pdb.gimp_image_merge_down (image,layer1,EXPAND_AS_NECESSARY) display_image(image)
add_layer 関数に横幅、縦幅、レイヤー階層も設定できるように引数(width ,height ,position)を追加してみた。
def add_layer(image, name, width, height, position):
position に、0を設定すると最前面、数が多いほど背面側に設置されることがわかった。
この場合、最前面 layer3[0]、真ん中 layer1[1]、最背面 layer2[2] となる。
そして、gimp_image_merge_down を使うと、最背面にあるレイヤーと指定した好きなレイヤーを結合できるようだ。
例:最背面 の layer2 とlayer1 を結合させたい場合、
layer12 = pdb.gimp_image_merge_down (image,layer1,EXPAND_AS_NECESSARY)
もし、同じ最背面のlayer2 を指定した場合、layer2 と layer2 を結合させようとしたので、エラーになる。
pdb.gimp_image_merge_down (image,layer2,EXPAND_AS_NECESSARY)
もし、3つのレイヤーを全部見せようとすると、以下のようになる。
image = create_image(500, 500) layer3 = add_layer(image, "背景3",400,400,0) draw_rect(layer3, 0, 0, 400, 400) layer2 = add_layer(image, "背景2",300,300,0) draw_rect(layer2, 0, 0, 300, 300) layer1 = add_layer(image, "背景1",250,250,0) draw_rect(layer1, 0, 0, 250, 250) layer23 = pdb.gimp_image_merge_down (image,layer2,EXPAND_AS_NECESSARY) layer123 = pdb.gimp_image_merge_down (image,layer1,EXPAND_AS_NECESSARY) display_image(image)
この場合、最前面 layer1 [0]、真ん中 layer2[1]、最背面 layer3 となる[2]。
(全てのレイヤーを position 0の最前面で配置しているが、追加するたびに古いものは背面にいくので)