使用 Gimp Python 插件导出所有 SVG 路径
Export all SVG paths with Gimp Python plugin
我想写一个 Gimp-Python 插件,以便从当前图像导出所有 SVG 路径。这看起来很简单,但我被 pdb 调用困住了,我可能没有正确调用过程,所以我需要你的帮助。
这是我的代码:
#!/usr/bin/env python
from gimpfu import *
def exportToSvg(img, layer) :
gimp.pdb.vectors_export_to_file(img,"C:/Users/Public/Documents/output.svg",0)
register(
"ExportToSvg",
"Export all SVG paths",
"Export all SVG paths from current image",
"My Name",
"My company",
"2015",
"<Image>/MyScripts/Export to svg",
"*",
[],
[],
exportToSvg)
main()
打开 Gimp 并加载图像后,当我点击我的插件时收到此错误:
调用 « gimp-procedural-db-proc-info » 时出错:
程序« vectors-export-to-file » 未找到
当我在 Gimp PDB 中搜索时,我可以找到"gimp-vectors-export-to-file" 那么问题是什么?
我应该如何调用这个程序?
你就快完成了 - "pdb" 模块只是在模块级别与 from gimpfu import *
一起公开,所以,不需要做 gimp.pdb.<procname>
- 只需 pdb.<procname>
(它不过会起作用。
但真正导致你的错误的是这个过程实际上被调用了
gimp_vectors_export_to_file
- 而不是 vectors_export_to_file
-
你应该这样称呼它:
pdb.gimp_vectors_export_to_file(img,"C:/Users/Public/Documents/output.svg",None)
另请注意,对于大多数需要图像项整数标识符的 PDB 调用,您应该传递一个代表该项的适当 Python 对象。保存单个Vector的"Vectors"对象是通过调用其他PDB函数获得的。为了保存所有向量,而不是函数描述中列出的“0”,传递 None
.
注意:有一个 Python 交互式控制台,您可以使用 filters->python->console
访问 - 如果您以交互方式测试 pdb 调用和图像操作,则为这些插件和脚本编写代码会容易得多首先.
要在交互式控制台中获取对您图像的引用,请键入:
img = gimp.image_list()[0]
我已经将这个问题改编成一个 gimp python 插件,它将此功能公开为 svg 导出格式。
我已经把它变成了一个要点,欢迎提出请求,这个要点可能比这个答案更有特色。
https://gist.github.com/thorsummoner/3ad6f806f1c08246f240222a3c0a5c47
将此源复制到 gimp 插件目录(并使其可执行)。
在我的系统上是 ~/.gimp-2.8/plug-ins/file-svg-export.py
,在 windows 上它可能在 %appdata%
.
的某处
#!/usr/bin/env python
# GIMP Plug-in for Simple SVG Exports
# Copyright (C) 2016 by Dylan Grafmyre <thorsummoner@live.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# based on an openraster plugin by
# https://git.gnome.org/browse/gimp/tree/plug-ins/pygimp/plug-ins/file-openraster.py?h=GIMP_2_8_16
import gimpfu
def register_save_handlers():
gimpfu.gimp.register_save_handler('file-svg-save', 'svg', '')
def save_svg(img, drawable, filename, raw_filename):
gimpfu.gimp.pdb.gimp_vectors_export_to_file(img, filename, None)
gimpfu.register(
'file-svg-save', #name
'save an SVG (.svg) file', #description
'save an SVG (.svg) file',
'Dylan Grafmyre', #author
'Dylan Grafmyre', #copyright
'2016', #year
'SVG',
'*',
[ #input args. Format (type, name, description, default [, extra])
(gimpfu.PF_IMAGE, "image", "Input image", None),
(gimpfu.PF_DRAWABLE, "drawable", "Input drawable", None),
(gimpfu.PF_STRING, "filename", "The name of the file", None),
(gimpfu.PF_STRING, "raw-filename", "The name of the file", None),
],
[], #results. Format (type, name, description)
save_svg, #callback
on_query = register_save_handlers,
menu = '<Save>'
)
gimpfu.main()
要简单地使用文件 -> 导出为,your file.svg
它将所有路径导出到单个 svg 文件。
从技术上讲,这并不能解决使用 Python 插件的问题,但是对于那些因为想一次导出所有路径而走到这里的人来说,GIMP 允许您在没有任何插件的情况下导出所有路径.
要导出所有路径而不是单个路径,请右键单击任何路径,select“导出路径...”并将 window 中的选项从“导出活动路径”更改为" 到 "从此图像导出所有路径"。
已使用 GIMP 版本 2.8 和 2.10 进行测试。
我想写一个 Gimp-Python 插件,以便从当前图像导出所有 SVG 路径。这看起来很简单,但我被 pdb 调用困住了,我可能没有正确调用过程,所以我需要你的帮助。
这是我的代码:
#!/usr/bin/env python
from gimpfu import *
def exportToSvg(img, layer) :
gimp.pdb.vectors_export_to_file(img,"C:/Users/Public/Documents/output.svg",0)
register(
"ExportToSvg",
"Export all SVG paths",
"Export all SVG paths from current image",
"My Name",
"My company",
"2015",
"<Image>/MyScripts/Export to svg",
"*",
[],
[],
exportToSvg)
main()
打开 Gimp 并加载图像后,当我点击我的插件时收到此错误:
调用 « gimp-procedural-db-proc-info » 时出错: 程序« vectors-export-to-file » 未找到
当我在 Gimp PDB 中搜索时,我可以找到"gimp-vectors-export-to-file" 那么问题是什么? 我应该如何调用这个程序?
你就快完成了 - "pdb" 模块只是在模块级别与 from gimpfu import *
一起公开,所以,不需要做 gimp.pdb.<procname>
- 只需 pdb.<procname>
(它不过会起作用。
但真正导致你的错误的是这个过程实际上被调用了
gimp_vectors_export_to_file
- 而不是 vectors_export_to_file
-
你应该这样称呼它:
pdb.gimp_vectors_export_to_file(img,"C:/Users/Public/Documents/output.svg",None)
另请注意,对于大多数需要图像项整数标识符的 PDB 调用,您应该传递一个代表该项的适当 Python 对象。保存单个Vector的"Vectors"对象是通过调用其他PDB函数获得的。为了保存所有向量,而不是函数描述中列出的“0”,传递 None
.
注意:有一个 Python 交互式控制台,您可以使用 filters->python->console
访问 - 如果您以交互方式测试 pdb 调用和图像操作,则为这些插件和脚本编写代码会容易得多首先.
要在交互式控制台中获取对您图像的引用,请键入:
img = gimp.image_list()[0]
我已经将这个问题改编成一个 gimp python 插件,它将此功能公开为 svg 导出格式。
我已经把它变成了一个要点,欢迎提出请求,这个要点可能比这个答案更有特色。
https://gist.github.com/thorsummoner/3ad6f806f1c08246f240222a3c0a5c47
将此源复制到 gimp 插件目录(并使其可执行)。
在我的系统上是 ~/.gimp-2.8/plug-ins/file-svg-export.py
,在 windows 上它可能在 %appdata%
.
#!/usr/bin/env python
# GIMP Plug-in for Simple SVG Exports
# Copyright (C) 2016 by Dylan Grafmyre <thorsummoner@live.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# based on an openraster plugin by
# https://git.gnome.org/browse/gimp/tree/plug-ins/pygimp/plug-ins/file-openraster.py?h=GIMP_2_8_16
import gimpfu
def register_save_handlers():
gimpfu.gimp.register_save_handler('file-svg-save', 'svg', '')
def save_svg(img, drawable, filename, raw_filename):
gimpfu.gimp.pdb.gimp_vectors_export_to_file(img, filename, None)
gimpfu.register(
'file-svg-save', #name
'save an SVG (.svg) file', #description
'save an SVG (.svg) file',
'Dylan Grafmyre', #author
'Dylan Grafmyre', #copyright
'2016', #year
'SVG',
'*',
[ #input args. Format (type, name, description, default [, extra])
(gimpfu.PF_IMAGE, "image", "Input image", None),
(gimpfu.PF_DRAWABLE, "drawable", "Input drawable", None),
(gimpfu.PF_STRING, "filename", "The name of the file", None),
(gimpfu.PF_STRING, "raw-filename", "The name of the file", None),
],
[], #results. Format (type, name, description)
save_svg, #callback
on_query = register_save_handlers,
menu = '<Save>'
)
gimpfu.main()
要简单地使用文件 -> 导出为,your file.svg
它将所有路径导出到单个 svg 文件。
从技术上讲,这并不能解决使用 Python 插件的问题,但是对于那些因为想一次导出所有路径而走到这里的人来说,GIMP 允许您在没有任何插件的情况下导出所有路径.
要导出所有路径而不是单个路径,请右键单击任何路径,select“导出路径...”并将 window 中的选项从“导出活动路径”更改为" 到 "从此图像导出所有路径"。
已使用 GIMP 版本 2.8 和 2.10 进行测试。