gpt4 book ai didi

python - Gimpfu 脚本 : Why does layer's ID get corrupted?

转载 作者:行者123 更新时间:2023-12-01 04:12:12 25 4
gpt4 key购买 nike

我一直在用自定义 gimpfu 插件以编程方式尝试 GIMP(v2.8.10) 层的操作。我成功地实现了对现有图层的一部分进行选择、旋转、缩放和动态平移:

插件内的一些代码:

为了相关性进行了简化。所有这些说明都有效。

# I only use one layer in the probe image
layer = img.layers[0]

selection = pdb.gimp_rect_select(img, init_coords[0], init_coords[1],
my_width,my_height,2,0,0)

# Copy and paste selection
pdb.gimp_edit_copy(layer)
float_layer = pdb.gimp_edit_paste(layer, 1)

# Transform floating selection step by step
float_layer = pdb.gimp_item_transform_rotate_simple(float_layer,
ROTATE_90, 1, 0, 0)
float_layer = pdb.gimp_layer_scale(float_layer, new_width,new_height, 1)
float_layer = pdb.gimp_layer_translate(float_layer, h_offset, 0)

问题

  • 如果我删除最后一行 (gimp_layer_translate),其他一切都会正常。
  • 否则,如果我删除包含 gimp_layer_scale 的行,其他一切都会正常。
  • 但是,如果我尝试同时使用所有这些函数,gimp_layer_translate 会崩溃,并出现 RuntimeError

The procedure gimp-layer-translate has been called with incorrect ID for «layer» arg. Probably is trying to operate with an unexisting layer.

我不知道为什么会这样失败。 如果他们单独工作,为什么不一起工作?我想知道。

引用文献

我习惯从 gimpbook.com 中的 template.py 开始作为构建插件的起点,因为它似乎有一个坚固的结构将代码封装到“撤消 block ”中。我有关 pdb 的主要信息来源是 this website我在谷歌上找到的。另外,我在this question上找到了一些我需要的程序。 .

另外,我的一个previous questions可能有助于作为如何开始为 gimp 制作自定义插件的引用。

是什么让我陷入困境

我不确定原因是 gimp 的错误还是我的代码执行错误。由于一些代码发布在linked question的答案上,我想知道我是否过度使用了可用内存(毕竟,我不知道我必须使用特定的过程调用来销毁对象,直到我找到答案)。 如果我不删除它们会发生什么?我想知道。 它们会一直保留在 RAM 中直到我关闭 GIMP,还是会生成会淹没 GIMP 系统的持久文件?老实说,我不知道忽略此问题的后果。

最佳答案

使用图层时删除分配。以下是销毁 float_layer 变量的方法:

# This creates a new layer that you assign to the float_layer
float_layer = pdb.gimp_item_transform_rotate_simple(float_layer,
ROTATE_90, 1, 0, 0)
# This does not return anything at all, it works with the layer in-place.
# But you overwrite the float_layer variable anyway, destroying it.
float_layer = pdb.gimp_layer_scale(float_layer, new_width,new_height, 1)
# This does not work because float_layer is no longer referencing the layer at all
float_layer = pdb.gimp_layer_translate(float_layer, h_offset, 0)

所以这样做:

float_layer = pdb.gimp_item_transform_rotate_simple(float_layer, 
ROTATE_90, 1, 0, 0)
pdb.gimp_layer_scale(float_layer, new_width,new_height, 1)
pdb.gimp_layer_translate(float_layer, h_offset, 0)

关于python - Gimpfu 脚本 : Why does layer's ID get corrupted?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34779837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com