You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GIMP Python插件中应用高通滤镜与高斯模糊?

GIMP Python插件中使用高通滤镜与高斯模糊的解决方案

一、高通滤镜(High Pass)的正确调用方式

你在程序浏览器找不到该滤镜,是因为它属于GEGL图形操作,而非GIMP原生的PDB(Procedure Database)插件,所以不会出现在普通的procedure browser列表里。调用gegl:high-pass无效果,通常是因为没有正确将GEGL操作关联到图层,或者参数设置不当。

以下是可行的代码示例:

from gimpfu import *
import gegl

def apply_high_pass(img, drawable, radius):
    # 启动撤销组,支持用户后续撤销操作
    pdb.gimp_image_undo_group_start(img)
    
    # 获取图层对应的GEGL节点
    gegl_node = drawable.get_gegl_node()
    # 创建高通滤镜子节点并关联到图层
    high_pass_node = gegl_node.create_child("gegl:high-pass")
    # 设置滤镜半径(单位:像素,可根据需求调整范围)
    high_pass_node.set_property("radius", radius)
    
    # 刷新图层使效果生效
    drawable.update(0, 0, drawable.width, drawable.height)
    # 结束撤销组
    pdb.gimp_image_undo_group_end(img)

# 注册插件到GIMP菜单(示例)
register(
    "python_fu_high_pass_example",
    "Apply High Pass Filter via GEGL",
    "Applies GEGL High Pass filter to selected layer",
    "Your Name",
    "Your Copyright",
    "2024",
    "<Image>/Filters/Enhance/High Pass (Python)",
    "*",
    [
        (PF_SLIDER, "radius", "Edge Radius", 5, (1, 50, 1)),
    ],
    [],
    apply_high_pass)

main()

关键注意点:

  • 必须通过drawable.get_gegl_node()获取图层的GEGL节点,直接调用gegl:high-pass无法关联到目标图层
  • radius参数决定滤镜强度:数值越大,保留的边缘范围越宽;数值越小,仅保留最锐利的边缘
  • 用undo_group包裹操作,保证用户可以正常撤销

二、高斯模糊的两种实现方式

GIMP Python插件中实现高斯模糊有两种常用方式,可根据需求选择:

方式1:使用GIMP原生PDB函数(简单直接)

调用GIMP内置的模糊函数,参数直观易调整:

def apply_gaussian_blur(img, drawable, radius, sigma):
    pdb.gimp_image_undo_group_start(img)
    # 调用原生高斯模糊接口
    pdb.gimp_drawable_blur(drawable, radius, sigma)
    drawable.update(0, 0, drawable.width, drawable.height)
    pdb.gimp_image_undo_group_end(img)

参数说明:

  • radius:模糊覆盖的像素半径
  • sigma:高斯核的标准差,通常设置为radius * 0.3左右,数值越大模糊效果越均匀

方式2:使用GEGL的高斯模糊操作(灵活可串联)

如果需要和其他GEGL滤镜组合使用,推荐这种方式:

def apply_gegl_gaussian_blur(img, drawable, radius):
    pdb.gimp_image_undo_group_start(img)
    gegl_node = drawable.get_gegl_node()
    blur_node = gegl_node.create_child("gegl:gaussian-blur")
    # 设置x/y方向的模糊标准差,保持一致可实现对称模糊
    blur_node.set_property("std-dev-x", radius)
    blur_node.set_property("std-dev-y", radius)
    drawable.update(0, 0, drawable.width, drawable.height)
    pdb.gimp_image_undo_group_end(img)

这种方式可以方便地和其他GEGL操作串联,构建复杂的滤镜流水线。


内容的提问来源于stack exchange,提问作者Luis A. Florit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:17:42