GIMP Python插件以层的形式加载2个图像

GIMP Python插件以层的形式加载2个图像,python,plugins,gimp,gimpfu,Python,Plugins,Gimp,Gimpfu,我正在尝试为gimp制作一个插件,它将两个图像作为单独的层打开,并对其中一个图像进行转换(下面将详细介绍)。我使用的是GIMP 2.10.12 我一直在努力为GIMP的Python接口找到一个合适的完整文档,并且主要是从我能够找到的代码片段开始工作。这就是我到目前为止所做的: #!/usr/bin/env python2 import os from gimpfu import * def load_pair(img_f): mask_f = img_f.replace(IMG_DI

我正在尝试为gimp制作一个插件,它将两个图像作为单独的层打开,并对其中一个图像进行转换(下面将详细介绍)。我使用的是GIMP 2.10.12

我一直在努力为GIMP的Python接口找到一个合适的完整文档,并且主要是从我能够找到的代码片段开始工作。这就是我到目前为止所做的:

#!/usr/bin/env python2
import os

from gimpfu import *

def load_pair(img_f):
    mask_f = img_f.replace(IMG_DIR, PRED_DIR)
    result_f = os.path.splitext(img_f.replace(IMG_DIR, SAVE_DIR))[0]
    result_dir = os.path.dirname(result_f)
    if not os.path.isdir(result_dir):
        os.makedirs(result_dir)

    img = gimp.Image(100, 100)
    pdb.gimp_display_new(img)
    for f, name, pos in ((img_f, "Image", 0), (mask_f, "Mask", 1)):
        layer = pdb.gimp_file_load_layer(img, f)
        pdb.gimp_layer_set_name(layer, name)
        pdb.gimp_image_insert_layer(img, layer, None, pos)


register(
    "python_fu_open_image_pair",
    ...,
    "<Toolbox>/Image/Open Image Pair",
    "",
    [(PF_FILE, "img_f", "Image:", None)],
    [],
    load_pair
)

main()
#/usr/bin/env蟒蛇2
导入操作系统
从gimpfu进口*
def加载对(img\U f):
掩码f=img\u f.替换(img\u DIR,PRED\u DIR)
result\u f=os.path.splitext(img\u f.replace(img\u DIR,SAVE\u DIR))[0]
result\u dir=os.path.dirname(result\u f)
如果不是os.path.isdir(结果目录):
操作系统生成目录(结果目录)
img=gimp.Image(100100)
pdb.gimp_显示_新(img)
对于f,name,pos in((img_f,“Image”,0),(mask_f,“mask”,1)):
layer=pdb.gimp\u文件\u加载\u层(img,f)
pdb.gimp\u图层\u集合\u名称(图层,名称)
pdb.gimp_图像_插入_层(img,层,无,位置)
登记册(
“python\u fu\u open\u image\u pair”,
...,
“/Image/打开图像对”,
"",
[(PF_文件,“img_f”,“图像:”,无)],
[],
负载对
)
main()
这是我想要的,但有几个问题

问题1 目前我正在使用
gimp.Image(100100)
打开一个新图像。这意味着每次加载新的图像对时,我必须将画布调整到层,并调整缩放和位置

有没有办法在打开图像之前从pdb中找到图像的大小,或者我必须使用另一个库(如PIL)来完成此操作?我正试图将插件的依赖性降到最低

这两个图像保证大小相同

由于File->Open会自动将画布调整为图像大小,因此我希望有一个很好的方法来实现这一点

问题2 我想自动创建当前工作文件并将其设置为
result\u f+'.xcf'
(参见上面的代码)-这样file->Save会自动保存到此文件。这在pdb中可能吗

问题3 最重要的是,我目前已将遮罩图像保存为黑白图像。加载一个新图层时,我想将黑色转换为透明,白色转换为绿色(0255,0)。此外,由于它们被保存为.jpg图像,因此白色和黑色的强度不一定是255和0,但可以稍微降低一点

如何在插件中自动执行此操作

  • 好的方法是正常加载第一个图像,其余的作为附加层加载。否则,加载所有层后,可以重置画布大小(
    pdb.gimp\u image\u resize(…)
    ),然后创建显示

  • 您可以通过设置
    image.name
    image.filename
    为图像指定名称和默认文件

  • 要将白色转换为绿色,请使用pdb。插入颜色通道混合器(…)并将所有增益设置为0,绿色除外。使用pdb使黑色透明。将颜色插入Alpha(…)

  • PS:对于color2alpha:

    import gimpcolor
    
    color=gimpcolor.RGB(0,255,0) # green, integer args: 0->255)
    # or
    color=gimpcolor.RGB(0.,1.,0) # green, floating point args (0.->1.)
    
    pdb.plug_in_colortoalpha(image, layer, color)
    
    Python文档是Scheme one的直接副本。在Python中,
    RUN-INTERACTIVE
    参数不是位置参数,因此它不会出现在大多数调用中,如果您需要,它是一个关键字参数。

    我已经完成了1)和2)的工作,但我仍停留在第3点上。我找不到如何在我的图层上使用这两个函数。我在上找不到这两个函数,我尝试使用
    pdb。插件颜色到alpha(运行非交互式,img,layer,'.'000')
    pdb。插件颜色到alpha(运行非交互式,img,layer,(0,0,0))
    但我得到了一个
    错误的参数数。我还试图删除
    img
    参数,但得到了一个
    错误的参数类型
    错误。