GIMP Python - 用颜色填充 Path/Vector
GIMP Python - Fill Path/Vector with color
我正在尝试开发一个可以 运行 打开的 SVG 文件的脚本。我想遍历所有路径并用任意颜色填充路径(稍后我将替换这部分代码)。这个的第一阶段只是遍历路径,我似乎无法弄清楚如何做到这一点。我的代码如下 - 为什么我没有看到任何路径被迭代?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gimpfu import *
def plugin_main(image, layer, path):
vectors_count, vectors = pdb.gimp_image_get_vectors(image)
for n in vectors:
pdb.gimp_image_select_item(image,CHANNEL-OP-REPLACE,n)
foreground = pdb.gimp_context_get_foreground()
pdb.gimp_edit_fill(image.layers[0], foreground)
register(
"create_polygon_art",
"Fills all the paths with the average color within path",
"Fills all the paths with the average color within path",
"Bryton Pilling",
"Bryton Pilling",
"2018",
"<Image>/Filters/Fill all paths with average color",
"RGB*, GRAY*",
[],
[],
plugin_main
)
main()
我还尝试了通过谷歌搜索发现的多种不同方法,包括使用更简单的迭代方法,例如:
for v in gimp.Vectors
但无论我尝试什么,我似乎都无法获得路径迭代的证据。
我在 Windows 10 64 位上使用 gimp 2.10.6。
这是一个陷阱... pdb.gimp_image_get_vectors(image)
returns 路径的整数 ID 列表,但以后的调用需要一个 gimp.Vectors
对象。
image.vectors
确实是 gimp.Vectors
的列表,您可以使用
迭代所有路径
for vector in image.vectors:
更多问题:
- 您在 register() 中声明了两个参数,但在您的函数中有三个。在实践中你不需要路径参数,因为无论如何你都会迭代它们。
- 你的函数的层参数是调用插件时的活动层,通常是你想要绘制的层
gimp-edit-fill
采用颜色源而不是颜色。当您进一步使用您的代码时,您将必须设置前景色,并且 push/pop 上下文
CHANNEL-OP-REPLACE
不是有效的 Python 符号,在 Python 中你应该使用 CHANNEL_OP_REPLACE
(带下划线)
两个 python 脚本集合 here and there。
如果您未满 Windows,一些调试脚本的提示 here
您的代码已修复:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gimpfu import *
def plugin_main(image, layer):
for p in image.vectors:
pdb.gimp_image_select_item(image,CHANNEL_OP_REPLACE,p)
pdb.gimp_edit_fill(layer, FOREGROUND_FILL)
register(
"create_polygon_art",
"Fills all the paths with the average color within path",
"Fills all the paths with the average color within path",
"Bryton Pilling",
"Bryton Pilling",
"2018",
"<Image>/Test/Fill all paths with average color",
"RGB*, GRAY*",
[],
[],
plugin_main
)
main()
您可以通过绘画 "strokes" 使您的代码更加人性化(这样您就有了一条多笔画的路径)。如果您想要单独选择笔划,您可以将它们复制到一个临时路径。可以在上面集合中的一些脚本中找到相关代码。
我正在尝试开发一个可以 运行 打开的 SVG 文件的脚本。我想遍历所有路径并用任意颜色填充路径(稍后我将替换这部分代码)。这个的第一阶段只是遍历路径,我似乎无法弄清楚如何做到这一点。我的代码如下 - 为什么我没有看到任何路径被迭代?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gimpfu import *
def plugin_main(image, layer, path):
vectors_count, vectors = pdb.gimp_image_get_vectors(image)
for n in vectors:
pdb.gimp_image_select_item(image,CHANNEL-OP-REPLACE,n)
foreground = pdb.gimp_context_get_foreground()
pdb.gimp_edit_fill(image.layers[0], foreground)
register(
"create_polygon_art",
"Fills all the paths with the average color within path",
"Fills all the paths with the average color within path",
"Bryton Pilling",
"Bryton Pilling",
"2018",
"<Image>/Filters/Fill all paths with average color",
"RGB*, GRAY*",
[],
[],
plugin_main
)
main()
我还尝试了通过谷歌搜索发现的多种不同方法,包括使用更简单的迭代方法,例如:
for v in gimp.Vectors
但无论我尝试什么,我似乎都无法获得路径迭代的证据。
我在 Windows 10 64 位上使用 gimp 2.10.6。
这是一个陷阱... pdb.gimp_image_get_vectors(image)
returns 路径的整数 ID 列表,但以后的调用需要一个 gimp.Vectors
对象。
image.vectors
确实是 gimp.Vectors
的列表,您可以使用
for vector in image.vectors:
更多问题:
- 您在 register() 中声明了两个参数,但在您的函数中有三个。在实践中你不需要路径参数,因为无论如何你都会迭代它们。
- 你的函数的层参数是调用插件时的活动层,通常是你想要绘制的层
gimp-edit-fill
采用颜色源而不是颜色。当您进一步使用您的代码时,您将必须设置前景色,并且 push/pop 上下文CHANNEL-OP-REPLACE
不是有效的 Python 符号,在 Python 中你应该使用CHANNEL_OP_REPLACE
(带下划线)
两个 python 脚本集合 here and there。
如果您未满 Windows,一些调试脚本的提示 here
您的代码已修复:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gimpfu import *
def plugin_main(image, layer):
for p in image.vectors:
pdb.gimp_image_select_item(image,CHANNEL_OP_REPLACE,p)
pdb.gimp_edit_fill(layer, FOREGROUND_FILL)
register(
"create_polygon_art",
"Fills all the paths with the average color within path",
"Fills all the paths with the average color within path",
"Bryton Pilling",
"Bryton Pilling",
"2018",
"<Image>/Test/Fill all paths with average color",
"RGB*, GRAY*",
[],
[],
plugin_main
)
main()
您可以通过绘画 "strokes" 使您的代码更加人性化(这样您就有了一条多笔画的路径)。如果您想要单独选择笔划,您可以将它们复制到一个临时路径。可以在上面集合中的一些脚本中找到相关代码。