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也能正确解析出成功状态。




