Gimp Script-Fu:删除选择

Gimp Script-Fu: Delete a selection

我正在尝试为 Gimp 编写一个脚本,该脚本将裁剪图像,对剩余的内容进行循环选择,反转选择,然后删除选择。我已经完成了裁剪、选择和反转部分,但删除是让我失望的。

(删除旧代码,查看更新)

这就是我的代码。 gimp-item-delete 代码让我感到困惑的是 item。我知道我需要将我当前的选择定义为 item,但我不确定该怎么做。如果有人能解释如何做到这一点,我将不胜感激!或者,如果有更简单的方法来完成我正在尝试做的事情(但最好仍在脚本中),请告诉我您的想法。我对这种编码的了解非常有限,因此感谢简单的解释。

UPDATE/EDIT: 这是(完整的)更新代码:

; XML2 Conversation Portrait Preview Crop
(define (script-fu-xml2-convo-preview image layer)
    (gimp-image-undo-group-start image)
    (gimp-selection-none image)
    (gimp-image-resize image 152 152 -280 -496)
    (gimp-layer-resize-to-image-size layer)
    (gimp-image-select-ellipse image 0 0 0 152 152)
    (gimp-selection-invert image)
    (gimp-displays-flush)
    (gimp-drawable-edit-clear layer)
    (gimp-selection-none image) 
    (gimp-image-undo-group-end image)
)
; populate script registration information
(script-fu-register 
    "script-fu-xml2-convo-preview"
    "XML2 Conversation Portrait Preview Crop"
    "Crops the preview window for XML2 conversation portraits."
    "BaconWizard17"
    "BaconWizard17"
    "September 2021"
    "*"
    SF-IMAGE        "Image"       0
    SF-DRAWABLE     "Layer"       0
)
; register the script within gimp menu
(script-fu-menu-register "script-fu-xml2-convo-preview" "<Image>/Marvel Mods/Skin Previews/XML2 PC")

所以当我运行安装这个脚本时,它似乎只是裁剪了它,并没有删除反向循环选择。但是,如果我以任何方式与图像交互(单击它、复制它、copy/paste 它、undo/redo),它会自行更正并显示正确裁剪的图像并删除圆角。当我第一次 运行 脚本时,它还会在顶部显示不正确的图像,您可以在其中选择正在处理的图像,但在与图像交互后,它会显示正确的图像。这是一个例子:

我使用 Ctrl+Shift+V 从剪贴板创建的初始图像(在使用 PrtScr 从游戏中截屏后):

然后,我 运行 脚本,结果如​​下:

在屏幕的顶部,图像显示如下(这是起始图像的左上角 152x152 像素:

当我以任何方式与它互动(点击它,copy/pasting它,复制它,undoing/redoing 操作)后图像的样子:

我与图片互动后屏幕顶部的缩略图:

也许它在操作过程中挂断了什么?我不确定。我知道这个问题是否不可避免,但我更希望能够 运行 脚本并继续前进,而不是必须与图像交互才能使其正确显示。图像在粘贴时确实有一个 alpha 层。

gimp-item-delete是memory/object管理的东西,很少用到。您要找的是 gimp-drawable-edit-clear.

请注意,如果您希望通过单个 Ctrl-Z.[=18= 撤消整个脚本,则应在 gimp-image-undo-group-end 之前完成(连同最后的 gimp-selection-none) ]

编辑:看来您的代码有效,只是显示没有更新以显示结果,这正是 gimp-display-flush 的目的,那么为什么您的代码调用它 之前 gimp-drawable-edit-cleargimp-display-flush 应该是您的脚本完成的最后一件事。