You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GIMP 3.0.8 Python插件调用gimp-image-select-polygon无选区且返回值异常求助

GIMP 3.0.8 Python插件调用gimp-image-select-polygon无选区且返回值异常求助

兄弟我太懂你这种在GIMP 3里折腾Python API的痛苦了!我刚升级到3.0版本的时候,也被这种PDB调用的新方式坑了好几天,你的问题我一看就知道是参数传递和run方法调用的姿势不对,来给你一步步修正:

核心问题拆解

1. DoubleArray的构建完全错了

你用Gimp.Array()DoubleArray的方式完全走偏了,GIMP 3里创建DoubleArray有直接的方法,根本不用绕这么大弯。而且gimp-image-select-polygon的坐标参数传递没这么复杂,直接把列表转成正确的数组类型就行。

2. 漏传了关键参数+run方法没带配置

你创建了config但完全没传给run()方法!相当于程序根本没拿到你设置的图像、选区模式、坐标这些参数,自然不会创建选区。另外你还漏了num-segs这个必填参数——它用来告诉PDB你传了几个点,没这个参数PDB根本不知道该怎么解析坐标数组。

3. 返回值是ValueArray是正常的

GIMP 3的PDB过程调用返回的都是Gimp.ValueArray,它把所有返回结果打包在里面,不是返回值异常,是你还没学会怎么解析它而已。

修正后的完整代码

import gi
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp
gi.require_version('GimpUi', '3.0')
from gi.repository import GimpUi
from gi.repository import GObject
from gi.repository import GLib
from gi.repository import Gtk

# 获取当前第一个图像
image = Gimp.get_images()[0]
mypdb = Gimp.get_pdb()
myproc = mypdb.lookup_procedure('gimp-image-select-polygon')

# 定义三角形的三个点坐标(格式:x1,y1, x2,y2, x3,y3)
pts = [100.1, 50.0, 800.1, 50.0, 800.1, 1000.0]
point_count = len(pts) // 2  # 计算点的数量,3个点

# 正确创建DoubleArray:直接用列表初始化(3.0.8版本支持这个方法)
darray = Gimp.DoubleArray.new_from_list(pts)

# 配置参数
config = myproc.create_config()
config.set_property('image', image)
config.set_property('operation', 2)  # 2对应替换现有选区(GIMP_CHANNEL_OP_REPLACE)
config.set_property('num-segs', point_count)  # 千万别忘了这个参数!
config.set_property('segs', darray)

# 传入配置执行选区操作
result = myproc.run(config)

# 解析返回值:ValueArray第一个元素就是操作是否成功的布尔值
is_success = result.index(0)
print(f"选区创建是否成功:{is_success}")

额外小技巧

如果觉得这种lookup procedure的方式太繁琐,GIMP 3其实还保留了类似旧版本的便捷调用方式,代码会简洁很多:

# 直接用PDB便捷调用,参数顺序和旧版本几乎一致
result = Gimp.pdb.gimp_image_select_polygon(image, 2, 3, pts)
is_success = result.index(0)

你之前的核心问题就是没把config传给run方法+漏传num-segs参数+数组构建错误,修正这几点之后,选区就能正常创建了,返回值的ValueArray也能正确解析出成功状态。

火山引擎 最新活动