Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Gimp Python插件导出所有SVG路径_Python_Svg_Gimp_Gimpfu - Fatal编程技术网

使用Gimp Python插件导出所有SVG路径

使用Gimp Python插件导出所有SVG路径,python,svg,gimp,gimpfu,Python,Svg,Gimp,Gimpfu,我想编写一个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) regist

我想编写一个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()
#/usr/bin/env python
从gimpfu进口*
def exportToSvg(img,层):
gimp.pdb.vectors\u导出到\u文件(img,“C:/Users/Public/Documents/output.svg”,0)
登记册(
“ExportToSvg”,
“导出所有SVG路径”,
“从当前图像导出所有SVG路径”,
“我的名字”,
“我的公司”,
"2015",
“/MyScripts/Export to svg”,
"*", 
[], 
[],
exportToSvg)
main()
打开Gimp并加载图像后,当我单击我的插件时,我收到以下错误:

调用«gimp过程db proc info»时出错: 未找到程序«矢量导出到文件»

当我在Gimp PDB中搜索时,我可以找到“Gimp向量导出到文件”,那么问题是什么?
我应该如何调用此过程?

您就快到了-通过gimpfu导入*中的
“pdb”模块在模块级别公开了,因此,无需执行
gimp.pdb.
-只需
pdb.
(尽管它可以工作)

但真正导致错误的是实际调用的过程
gimp\u向量\u导出到\u文件
-而不是
向量\u导出到\u文件
-

您应该将其称为:

pdb.gimp_vectors_export_to_file(img,"C:/Users/Public/Documents/output.svg",None)
还要注意,对于大多数需要图像项的整数标识符的PDB调用,应该传递一个表示该项的适当Python对象。用于保存单个向量的“向量”对象是通过调用其他PDB函数获得的。要保存所有向量,请传递
None
,而不是函数描述中列出的“0”

注意:有一个Python交互控制台,您可以使用
过滤器->Python->console
访问它-如果您先以交互方式测试pdb调用和图像处理,那么为这些插件和脚本编写代码就容易多了

要在交互式控制台中获取对图像的引用,请键入:


img=gimp.image\u list()

我已经把它做成了一个要点,欢迎大家,要点可能比这个答案更有特色

将此源代码复制到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()
#/usr/bin/env python
#用于简单SVG导出的GIMP插件
#Dylan Grafmyre 2016年版权所有
#
#此程序是免费软件:您可以重新发布和/或修改它
#它是根据GNU通用公共许可证的条款发布的
自由软件基金会;许可证的第3版,或
#(由您选择)任何更高版本。
#基于openraster插件
# https://git.gnome.org/browse/gimp/tree/plug-ins/pygimp/plug-ins/file-openraster.py?h=GIMP_2_8_16
进口gimpfu
def寄存器_保存_处理程序():
gimpfu.gimp.register\u save\u处理程序('file-svg-save','svg','')
def save_svg(img、可绘制、文件名、原始文件名):
gimpfu.gimp.pdb.gimp\u向量\u导出到\u文件(img,文件名,无)
gimpfu寄存器(
“文件svg保存”,#名称
“保存SVG(.SVG)文件”,描述
“保存SVG(.SVG)文件”,
“迪伦·格拉夫迈尔”,作者
“Dylan Grafmyre”,版权所有
“2016年”
“SVG”,
'*',
[#输入args.Format(类型、名称、说明、默认值[、额外])
(gimpfu.PF_图像,“图像”,“输入图像”,无),
(gimpfu.PF_可绘制,“可绘制”,“可输入绘制”,无),
(gimpfu.PF_字符串,“文件名”,“文件名”,无),
(gimpfu.PF_字符串,“原始文件名”,“文件名”,无),
],
[],#results.Format(类型、名称、描述)
保存svg,#回调
在\u query=register\u save\u处理程序上,
菜单=“”
)
gimpfu.main()
只需使用File->Export As,
your File.svg


它会将所有路径导出到一个svg文件。

很好,但是当我调用
pdb.gimp\u vectors\u export\u to\u file(img,“C:/Users/Public/Documents/output.svg”,0)时,我仍然有一个“错误的参数类型”错误。
我的字符串显然是不正确的,无论路径如何,我总是会得到一个错误。有什么想法吗?对不起-由于历史原因,GIMP中的所有文件操作都同时使用“文件名”和“原始文件名”参数-只需将相同的参数传递给这两个参数即可。也就是说:在要传递的参数“0”上重复文件路径。很抱歉,尝试
pdb.gimp\u vectors\u export\u to\u file(img,“C:/Users/Public/Documents/output.svg”,“C:/Users/Public/Documents/output.svg”)
仍然不起作用。此外,根据pdb文档,函数向量_export_to_file不接受参数中的原始文件。这个解决方案必须非常简单,但我仍然被卡住了。再次抱歉——不希望任何来自Python的PDB调用将原始int标识符作为参数。在涉及向量的调用中,您应该传递一个完整的“vectors”对象(通过使用“
pdb.gimp\u image\u get\u active\u vectors
”之类的调用获得)。在这种情况下,要保存所有向量,而不是“0”,请将其传递为“None”作为第三个参数。(我将编辑答案以反映这一点)非常感谢您的帮助,我的(简单)插件按预期工作!您的插件似乎比我的代码更“专业”,但在我提问时,出于效率原因,我需要一次单击导出。无论如何,感谢您的回答。