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

时间:2015-03-19 15:20:04

标签: 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)

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”,那么问题是什么? 我该怎么称呼这个程序?

2 个答案:

答案 0 :(得分:1)

你几乎就在那里 - “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对象。用于保存单个向量的“向量”对象是通过调用其他PDB函数获得的。要保存所有向量,而不是函数描述中列出的“0”,请传递None

注意:您可以使用filters->python->console访问Python交互式控制台 - 如果您首先以交互方式测试pdb调用和图像处理,则可以更轻松地编写这些插件和脚本的代码。

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

img = gimp.image_list()[0]

答案 1 :(得分:1)

我已将此问题改编为gimp python插件,该插件将此功能公开为svg导出格式。

我已经把它变成了一个要点,拉请求欢迎,要点可能比这个答案更有特色。

https://gist.github.com/thorsummoner/3ad6f806f1c08246f240222a3c0a5c47

将此源​​复制到gimp插件目录中(并使其可执行)。

在我的系统 try { List<Student> students = new List<Student>(); using (StreamReader sr = new StreamReader(txt_path.Text)) { string xmlc = string.Empty; while (sr.Peek() >= 0) { string str; string[] strArray; str = sr.ReadLine(); if (!string.IsNullOrWhiteSpace(str) && !str.StartsWith("#")) { xmlc += str; strArray = xmlc.Split('@', '#'); saveXml.saveData(xmlc, "data.xml"); saveXml.saveData(strArray, "data.xml"); } Student s = new Student(); s.ID = int.Parse(strArray[0]); s.Name = strArray[1]; s.Address = strArray[2]; s.Phone = strArray[3]; students.Add(s); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } 上,在Windows上可能位于~/.gimp-2.8/plug-ins/file-svg-export.py的某个位置。

%appdata%

简单地使用文件 - &gt;导出为,#!/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()

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