首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python-fu GIMP脚本不粘贴图像

Python-fu GIMP脚本不粘贴图像
EN

Stack Overflow用户
提问于 2012-05-24 08:38:32
回答 1查看 1.4K关注 0票数 1

我正在试着写一个脚本,把一层切成小块。它可以正常运行,但没有任何内容被粘贴到新图层中。

代码语言:javascript
复制
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。我怎么才能修复它?有没有更好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-24 10:46:57

我现在正在看你的脚本-这是一个很好的方法,我发现了错误的地方:当你调用gimp_edit_paste时,你创建的选区(使用gimp_rect_select)仍然是活动的,并且浮动层的内容被它裁剪。(实际上,我认为它们只是在"selection_anchor“调用时的剪辑,但这是无关紧要的)。

因此,在floating_sel = pdb.gimp_edit_paste(layer, True)之前添加pdb.gimp_selection_none(i)行可以修复您的函数:

代码语言:javascript
复制
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>)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10729734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档