1

我正在尝试为 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()

这种做我想要的,但有几个问题。

问题 1

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

有没有办法在打开它之前从 pdb 中找到图像的大小,还是我必须为此使用另一个库(如 PIL)?我试图将我的插件的依赖项保持在最低限度。

这两个图像保证具有相同的大小。

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

问题2

我想自动创建并将当前工作文件设置为result_f + '.xcf'(参见上面的代码) - 这样 File -> Save 会自动保存到这个文件。这在pdb中可能吗?

问题 3

最重要的是,我目前将蒙版图像保存为黑白图像。将蒙版加载为新图层后,我想将黑色转换为透明,将白色转换为绿色(0,255,0)。此外,由于它们被保存为 .jpg 图像,因此白色和黑色不一定是 255 和 0 强度,但可以稍微偏离。

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

4

1 回答 1

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

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

  3. 要将白色转换为绿色,请使用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)

Python 文档是 Scheme one 的直接副本。在 Python 中,RUN-INTERACTIVE参数不是位置参数,因此在大多数调用中不会出现,如果需要,它是关键字参数。

于 2019-10-11T14:51:00.180 回答