Python gimpfu插件的撤销堆栈是如何工作的?

Python gimpfu插件的撤销堆栈是如何工作的?,python,gimp,gimpfu,Python,Gimp,Gimpfu,我正在为GIMP编写一个python插件。插件会处理图像,但撤销堆栈实际上不会撤销我的插件所做的任何操作 在这种情况下,如何使撤消工作 例如,下面将RGBA图像中的第一个平铺设置为透明。撤消堆栈将显示“示例”和“[基础图像]”,但切换到基础图像不会撤消透明度 #!/usr/bin/env python from gimpfu import * import struct def do_python_fu_example(img, layer): pdb.gimp_undo_push_

我正在为GIMP编写一个python插件。插件会处理图像,但撤销堆栈实际上不会撤销我的插件所做的任何操作

在这种情况下,如何使撤消工作

例如,下面将RGBA图像中的第一个平铺设置为透明。撤消堆栈将显示“示例”和“[基础图像]”,但切换到基础图像不会撤消透明度

#!/usr/bin/env python
from gimpfu import *
import struct

def do_python_fu_example(img, layer):

    pdb.gimp_undo_push_group_start(img)

    # example: set the first tile to completely transparent
    tile = layer.get_tile(False, 0, 0)
    for y in xrange(tile.eheight):
        for x in xrange(tile.ewidth):
            pixel = struct.unpack("BBBB",tile[x,y])
            pixel = struct.pack("BBBB", pixel[0], pixel[1], pixel[2], 0)
            tile[x,y] = pixel

    pdb.gimp_undo_push_group_end(img)

    layer.update(0,0,layer.width,layer.height)
    layer.flush()
# end do_swap

register(
    "python_fu_example",
    "Example",
    "Example",
    "Example",
    "Example",
    "2016",
    "Example...",
    "RGBA",      # Alternately use RGB, RGB*, GRAY*, INDEXED etc.
    [
        (PF_IMAGE, "img", "Input image", None),
        (PF_DRAWABLE, "layer", "Input layer", None),
    ],
    [],
    do_python_fu_example, menu="<Image>/Colors")

main()
#/usr/bin/env python
从gimpfu进口*
导入结构
def do_python_fu_示例(img,层):
pdb.gimp\U undo\U push\U group\U start(img)
#示例:将第一个平铺设置为完全透明
平铺=图层。获取平铺(False,0,0)
对于X范围内的y(平铺高度):
对于x范围内的x(平铺宽度):
像素=结构解包(“BBBB”,平铺[x,y])
像素=结构包(“BBBB”,像素[0],像素[1],像素[2],0)
平铺[x,y]=像素
pdb.gimp\U undo\U push\U group\U end(img)
layer.update(0,0,layer.width,layer.height)
layer.flush()
#结束交换
登记册(
“python_fu_示例”,
“示例”,
“示例”,
“示例”,
“示例”,
"2016",
“例如……”,
“RGBA”,#交替使用RGB、RGB*、灰色*、索引等。
[
(PF_图像,“img”,“输入图像”,无),
(PF_可绘制,“层”,“输入层”,无),
],
[],
do_python_fu_示例,menu=“/Colors”)
main()