GIMP Python 加载 2 个图像作为图层的插件
GIMP Python Plugin to load 2 images as layers
我正在尝试为 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)
打开新图片。这意味着每次加载新图像对时,我都必须将 Canvas 适合图层并调整缩放和位置。
有没有办法在打开图像之前从 pdb 中找到图像的大小,或者我是否必须为此使用另一个库(如 PIL)?我试图将我的插件的依赖性保持在最低限度。
两张图片保证大小一致。
由于“文件”->“打开”会自动将 canvas 调整为图像大小,我希望有一个很好的方法来实现这一点。
问题 2
我想自动创建当前工作文件并将其设置为 result_f + '.xcf'
(参见上面的代码)- 这样文件 -> 保存将自动保存到该文件。这在 pdb 中可能吗?
问题 3
最重要的是,我目前将蒙版图像保存为黑白图像。将蒙版加载为新图层后,我想将黑色转换为透明,将白色转换为绿色 (0,255,0)。此外,由于它们被保存为 .jpg 图像,因此白色和黑色不一定完全是 255 和 0 强度,但可以稍微偏离。
如何在我的插件中自动执行此操作?
好的方法是正常加载第一张图像,其余的作为附加层。否则,您可以在加载所有图层后重置 canvas 大小 (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)
Python 文档是方案一的直接副本。在Python中,RUN-INTERACTIVE
参数不是位置参数,所以它不会出现在大多数调用中,如果你需要它,它是一个关键字参数。
我正在尝试为 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)
打开新图片。这意味着每次加载新图像对时,我都必须将 Canvas 适合图层并调整缩放和位置。
有没有办法在打开图像之前从 pdb 中找到图像的大小,或者我是否必须为此使用另一个库(如 PIL)?我试图将我的插件的依赖性保持在最低限度。
两张图片保证大小一致。
由于“文件”->“打开”会自动将 canvas 调整为图像大小,我希望有一个很好的方法来实现这一点。
问题 2
我想自动创建当前工作文件并将其设置为 result_f + '.xcf'
(参见上面的代码)- 这样文件 -> 保存将自动保存到该文件。这在 pdb 中可能吗?
问题 3
最重要的是,我目前将蒙版图像保存为黑白图像。将蒙版加载为新图层后,我想将黑色转换为透明,将白色转换为绿色 (0,255,0)。此外,由于它们被保存为 .jpg 图像,因此白色和黑色不一定完全是 255 和 0 强度,但可以稍微偏离。
如何在我的插件中自动执行此操作?
好的方法是正常加载第一张图像,其余的作为附加层。否则,您可以在加载所有图层后重置 canvas 大小 (
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)
Python 文档是方案一的直接副本。在Python中,RUN-INTERACTIVE
参数不是位置参数,所以它不会出现在大多数调用中,如果你需要它,它是一个关键字参数。