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

is there a way to copy a filter from one layer to another layer using python

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

我的代码:

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

我找不到使用的方法:

dir(layer_with_filter)

如果在该图层中添加了效果或滤镜,是否可以知道或者滤镜的变化是否发生在其他地方?

谢谢

不,那不可能。

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

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

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

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

并且,再次特别针对 IWarp,过滤器已在开发版本中提升为完全交互的工具,并且没有机制来检索工具与一层交互的结果 "replay" 在另一层上。