我正在尝试为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()
这是我想要的,但是有几个问题。
当前,我正在使用gimp.Image(100, 100)
打开新图像。这意味着每次加载新的图像对时,我都必须将“画布”调整为“图层”并调整缩放比例和位置。
是否有办法在打开pdb之前从pdb中查找图像的大小,或者我必须为此使用另一个库(例如PIL)?我正在尝试使插件的依赖性降到最低。
保证两个图像具有相同的尺寸。
由于File-> Open会自动将画布调整为图像大小,我希望会有一种不错的方法来实现这一目的。
我想自动创建当前工作文件并将其设置为result_f + '.xcf'
(请参见上面的代码)-这样,文件->保存将自动保存到该文件。在pdb中可以吗?
最重要的是,我目前将“蒙版”图像另存为黑白图像。将蒙版作为新层加载后,我想将黑色转换为透明,将白色转换为绿色(0,255,0)。另外,由于将它们另存为.jpg图像,因此白色和黑色不一定精确地为255和0强度,但是可以稍微偏离一点。
如何在我的插件中自动执行此操作?
好的方法是正常加载第一个图像,其余图像作为附加层。否则,一旦加载了所有图层,就可以重置画布大小(pdb.gimp_image_resize(...)
),然后创建显示。
您可以通过设置image.name
和image.filename
为图像指定名称和默认文件。
要将白色转换为绿色,请使用pdb.plug_in_colors_channel_mixer(...)
并将所有增益设置为0。绿色除外。使黑色透明使用pdb.plug_in_colortoalpha(...)
。
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)
据我所知,这仅适用于8位图像,在32位FP图像上我得到非常奇怪的结果/
Python文档是Scheme一的直接副本。在Python中,RUN-INTERACTIVE
参数不是位置参数,因此它不会出现在大多数调用中,如果需要,它是关键字参数。