gpt4 book ai didi

Python-fu GIMP脚本不粘贴图像

转载 作者:太空宇宙 更新时间:2023-11-03 19:17:55 25 4
gpt4 key购买 nike

我正在尝试编写一个脚本,将一个图层切成小块。它运行正确,但没有任何内容粘贴到新层中。

def explode_layer( i, l, dx, dy ):
T=[]
for ix,ox in enumerate(range(l.offsets[0], l.offsets[0]+l.width, dx )):
for iy,oy in enumerate(range(l.offsets[1], l.offsets[1]+l.height, dy)):
pdb.gimp_rect_select(i, ox, oy, dx, dy, 2, False, 0)
if not pdb.gimp_edit_copy(l):
continue
layer = pdb.gimp_layer_new(i, dx, dy, 1,
l.name+" %d,%d"%(ix,iy), 100, 0)
i.add_layer(layer)
floating_sel = pdb.gimp_edit_paste(layer, True)
pdb.gimp_layer_set_offsets(floating_sel, *layer.offsets)
pdb.gimp_floating_sel_anchor(floating_sel)
T.append(layer)
return T

我在 Ubuntu 10.04 上使用 gimp 2.6.8。我该如何修复它?有更好的方法吗?

最佳答案

我现在正在看你的脚本 - 这是一个很好的方法 - 我发现了问题所在:当您调用 gimp_edit_paste 时,您创建的选区(使用 gimp_rect_select)仍然处于事件状态,并且 float 图层的内容将被它剪切。 (实际上我认为它们只是在“selection_anchor”调用时被剪辑,但这无关紧要)。

因此,添加 pdb.gimp_selection_none(i) floating_sel = pdb.gimp_edit_paste(layer, True) 之前的行修复你的功能:

def explode_layer( i, l, dx, dy ):
T=[]
for ix,ox in enumerate(range(l.offsets[0], l.offsets[0]+l.width, dx )):
for iy,oy in enumerate(range(l.offsets[1], l.offsets[1]+l.height, dy)):
pdb.gimp_rect_select(i, ox, oy, dx, dy, 2, False, 0)
if not pdb.gimp_edit_copy(l):
continue
layer = pdb.gimp_layer_new(i, dx, dy, 1,
l.name+" %d,%d"%(ix,iy), 100, 0)
i.add_layer(layer)
pdb.gimp_selection_none(i)
floating_sel = pdb.gimp_edit_paste(layer, True)
pdb.gimp_layer_set_offsets(floating_sel, *layer.offsets)
pdb.gimp_floating_sel_anchor(floating_sel)
T.append(layer)
return T

一种更简单的方法是不显式创建新图层(顺便说一句,图像对象上有一个方便但未记录的“new_layer”方法,它创建并添加新图层,并且大多数参数都有合理的默认值 - 所以, i.new_layer(<name>, <width>, <height>) 就足够了) - 但您可以简单地复制、粘贴,然后它们调用 new_layer = pdb.gimp_floating_sel_to_layer(<floating_sel>)反而。

关于Python-fu GIMP脚本不粘贴图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729734/

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