【问题标题】:Gimp Script-Fu: Delete a selectionGimp Script-Fu:删除选区
【发布时间】:2021-09-14 19:06:06
【问题描述】:

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

(已删除旧代码,请参阅更新)

这就是我的代码。 gimp-item-delete 代码让我感到困惑的是 item。我知道我需要将我当前的选择定义为item,但我不确定如何执行此操作。如果有人可以解释如何做到这一点,我将不胜感激!或者,如果有更简单的方法来做我想做的事情(但最好还是在脚本中),请让我知道你的想法。我对这种编码的了解非常有限,因此感谢您提供简单的解释。

更新/编辑: 这是(完整的)更新代码:

; 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")

所以当我运行这个脚本时,它似乎只是裁剪了它,并没有删除倒置的圆形选择。但是,如果我以任何方式与图像交互(单击它、复制它、复制/粘贴它、撤消/重做),它会自行纠正并显示带有已删除圆角的正确裁剪的图像。当我第一次运行脚本时,它还会在顶部显示不正确的图像,您可以在其中选择正在处理的图像,但在与图像交互后,它会显示正确的图像。这是一个例子:

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

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

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

当我以任何方式与图像交互(单击、复制/粘贴、复制、撤消/重做操作)后,图像的外观:

我与图像交互后屏幕顶部的缩略图:

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

【问题讨论】:

    标签: scheme gimp script-fu


    【解决方案1】:

    gimp-item-delete 是一个内存/对象管理的东西,很少使用。你要找的是gimp-drawable-edit-clear。

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

    编辑:您的代码似乎可以工作,只是显示器没有更新以显示结果,这正是gimp-display-flush 的目的,所以为什么您的代码调用它 before gimp-drawable-edit-clear? gimp-display-flush 应该是你的脚本完成的最后一件事。

    【讨论】:

    • 这似乎是我正在寻找的。看起来该命令需要的参数是drawable。我怎样才能将我的选择设置为那样?还是我应该只做gimp-drawable-edit-clear layer?
    • 是的,它隐式使用当前选择(就像你在 UI 中使用 [del] 或 Edit &gt;&gt; Clear 时一样)
    • 所以我试了一下,结果有点奇怪。当我执行该命令时,它只是将其裁剪为一个正方形并且不会删除任何内容。但是,如果我撤消它并重做它,那么它会正确显示为裁剪并显示为一个圆圈。这可能是什么原因?我应该再次发布我的代码吗?如果是这样,最好的方法是什么?
    • 是的,请使用新代码更新您的问题,也许在屏幕截图之前/之后。图层上是否有 Alpha 通道(如果在图层列表中以粗体显示 => 没有 Alpha 通道)? gimp-drawable-edit-clear 如果您希望角落透明,则需要一个。
    • 我将更新后的脚本添加到顶部,以及运行它时会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2012-07-15
    相关资源
    最近更新 更多