有没有办法使用python将过滤器从一个层复制到另一个层

时间:2017-08-17 18:37:35

标签: python gimp python-fu

我正在使用python-fu,我想将我添加到一层的过滤器iwarp复制到我刚刚添加到文档中的另一层。

我的代码:

document = gimp.image_list()[0]
layer_with_filter = document.layers[0]
layer_without_filter = document.layers[3]

我找不到使用方法:

dir(layer_with_filter)

如果有效果或过滤器添加到该图层,是否可以知道或者过滤器的更改是否发生在其他地方?

谢谢

1 个答案:

答案 0 :(得分:1)

不,那是不可能的。

您可以通过Python执行几乎所有带有Python端的任意值的过滤器。但是没有办法告诉GIMP重复使用先前值的过滤器,或者检索Python端过滤操作中使用的值。

I-Warp特别不能以编程方式使用,因为它依赖于与插件窗口的实时交互来创建失真贴图 - 你在那里运气不好。

但是,使用“IWarp”插件可以完成的任何事情都可以通过“Displace”插件(检查Filters->Map->Displace...)来完成,其中一个 可用以编程方式,您可以使用Python将一个置换应用的效果应用于其他层。然而,“Displace”需要两个中间层,指示要用于原始图像上的每个像素的偏移。将这两个层组合为2D场,其中每个像素的值(其亮度)指示将放置目标像素的偏移的一个坐标。在内部,这就是IWarp所做的 - 然而,置换贴图本身是由其“内部工具”创建的,例如成长,收缩,移动...... - 并且没有编程方法来检索IWarp使用的置换贴图以便它可以粘贴在ayer中并与Displacement过滤器一起使用。但如果你真的需要这个功能,这可能是最简单的方法:修改IWarp filter的源代码(在C中)添加一个按钮以“保存置换贴图” - 它们可以创建两个适合位移过滤器使用的新层。

回到以编程方式重复其他过滤器的主题:GIMP的开发分支 - GIMP 2.9已经使用GEGL(通用图形库)将大多数过滤器切换到一个完整的新框架 - GIMP中所有像素操作的新引擎。但是,Python绑定尚未更新,无法利用这些新过滤器。当它们最终存在时,很可能可以调用检索最后使用的值。

而且,再次特别针对IWarp,过滤器已经在开发版本中被提升为一个完全交互式的工具,并且没有机制来检索工具与一个层的交互结果以“重放”那个其他层。