【问题标题】:Python-fu/gimpfu parameters - What does "image" mean?Python-fu/gimpfu 参数 - “图像”是什么意思?
【发布时间】:2026-01-13 06:45:01
【问题描述】:

我一直在尝试从 script-fu 切换到 python-fu,但我不知道应该为“image”参数传递什么。在 script-fu 中它只是一个整数,但是当我将相同的整数放入 python-fu 时,它只是说它是错误的类型。与字符串和浮点数相同......我应该在这里放什么?文档只是说它采用的参数是“IMAGE”,但这是什么意思?我在哪里可以找到它?如何获得?

pdb.gimp_image_get_layers(image)

Here's a picture of the interpreter.

【问题讨论】:

    标签: gimp gimpfu python-fu


    【解决方案1】:

    你传递一个 Image 对象 - 大多数在 script-fu 中只是整数的参数都不会被使用 - 取而代之的是,您必须传递一个实际的对象引用。你如何得到这些?

    所有 PDB 函数和方法都已经返回这些对象 - 而不是它们的数字 ID,就像它在 script-fu 中发生的那样。

    因此,对于 Image,您可以获取 Image 作为 python-fu 函数的参数,或者调用 pdb.gimp_image_new。

    如果您经常在交互式控制台上进行测试,则必须获取对活动图像的引用。在这种情况下,请致电 gimp.image_list() 获取包含当前打开图像的 Python 列表 - 此列表中索引 0 处的图像是屏幕上最右侧(最新)的打开图像 - 所以只需执行 image = gimp.image_list()[0] 即可获得对它的引用。

    当您使用它时,使用dir(image) 探索图像对象,您会发现它填充了属性和方法,这些属性和方法是其他难以键入的 pdb 调用的便捷快捷方式。例如,image.layers 给你一个 Python 列表,引用图像上的所有图层(作为实际的图层对象,而不是它们的 ID),image.width 给你宽度,调用img.new_layer() 创建一个新图层并添加它到图像 - 此调用具有可选参数来指定其名称、宽度、高度等。

    作为最后的手段,gimp 模块上的保留方法可以将数字 ID 转换为实际对象:'_id2display', '_id2drawable', '_id2image', '_id2vectors' - 您不需要使用这些方法。如果您发现自己需要在脚本主体中使用它们,因为某些 pdb 函数返回 ID 而不是对象,请在 GIMP 的 bugzilla 上填写错误报告。

    【讨论】:

    • 我正在用 2.10 测试这个答案,并且不能使用 image.width 或 image.layers 使用这种技术。 “图像”是一个 int(类型(图像))。 2.10 API 有变化吗?
    • 您使用的是哪个版本? gimp.list_images() 应该返回 Image 对象,而不是 int。这将是一个重大的回归——但并非不可能发生——并且需要等待新的次要版本进行修复。
    • 我刚刚打开了 GIMP,gimp.list_images() 现在返回给我的图片列表……每张图片都有.layers。我不知道我在评论时做了什么。我的错误,对此感到抱歉。
    • 如果您打开了多个图像怎么办?你如何获得活跃的?如果您的代码被称为过滤器,您似乎可以将其作为函数参数获取,但如果您从控制台手动运行呢?
    • gimp.image_list() 返回一个包含所有当前打开图像的纯 Python 列表。这些是 Python 端的丰富对象,并具有诸如“.name”之类的属性——因此您可以检查所需的图像位置。如果您创建了一个填充插件,程序会自动将活动图像作为参数传递给您的插件函数。
    最近更新 更多