GIMP pythonfu 从当前图像中获取可绘制对象

GIMP pythonfu get drawable from current image

我正在遍历所有打开的图像。我想对他们每个人应用阈值。由于阈值插件将 drawable 作为参数,因此每次更改图像时都应更改可绘制对象,至少这在编程上是有意义的。那么,如何从当前图像中获取可绘制对象?

    for subimage in gimp.image_list():
        pdb.gimp_undo_push_group_start(subimage)
        pdb.gimp_drawable_set_image(drawable, subimage)
        pdb.plug_in_randomize_pick(image,drawable,rndm_pct, rndm_rcount, randomize, seed)
        spread_amount_x, spread_amount_y = 3, 3
        # pdb.plug_in_spread(subimage,drawable,spread_amount_x, spread_amount_y)
        pdb.plug_in_spread(subimage,drawable,spread_amount_x, spread_amount_y)
        pdb.plug_in_gauss_rle2(subimage,drawable,horizontal, vertical)
        # pdb.gimp_threshold(drawable, low_threshold, high_threshold)    
        pdb.gimp_undo_push_group_end(subimage)

请注意,注释掉的阈值会在所选图像上重复应用阈值,而不是循环应用所有图像。为了让我做到这一点,我必须在上下文中切换到图像的可绘制对象。

如果图像只有一个图层,则:

drawable=subimage.layers[0]

drawable=subimage.active_layer

如果你有好几层,那么你可以使用索引(顶层是layers[0],bottom/background层是layers[-1]),或者你通过其他方式,例如:

drawable=[d for d in image.layers if d.name=='Target'][0]

PS:如果您冻结撤消堆栈(或者甚至可能完全禁用撤消)而不是执行 undo-groups,您的脚本可能会 运行 更快并且使用更少的 RAM。