如何在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
相关产品推荐
相关产品推荐

