2015-03-19 5 views
4

Я хочу написать плагин Gimp-Python, чтобы экспортировать все пути SVG из текущего изображения. Это кажется довольно простым, но я застрял в вызовах pdb, я не могу правильно обращаться к процедурам, поэтому мне нужна ваша помощь.Экспортировать все пути SVG с помощью плагина Gimp Python

Вот мой код:

#!/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 и загрузки изображения, когда я нажимаю на мой плагин я получаю эту ошибку:

Ошибка при вызове «садомазо-процедурного db- прок-инфо »: Процедура«векторы-экспорт в файл»не найден

Когда я ищу в Gimp PDB, я могу найти„Gimp-векторы-экспорт в файл“, так что это проблема? Как я могу назвать эту процедуру?

ответ

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.

NB: есть интерактивная консоль Python, к которой вы можете получить доступ, используя filters->python->console - гораздо проще кодировать эти плагины и скрипты, если вы сначала проверите свои вызовы pdb и манипуляции изображениями в интерактивном режиме.

Чтобы получить ссылку на ваше изображение в интерактивной консоли, введите:

img = gimp.image_list()[0]

+0

Отлично, но у меня все еще есть ошибка «неправильного параметра» при вызове 'pdb.gimp_vectors_export_to_file (img,« C: /Users/Public/Documents/output.svg », 0)' Моя строка, по-видимому, не является правильно и независимо от пути я всегда получаю ошибку. Есть идеи ? – Swe

+0

Извините - все операции с файлами в GIMP содержат как имя файла, так и имя файла с исходным именем по историческим причинам - просто передайте один и тот же параметр. То есть: повторите путь файла по параметру, который вы передаете «0». – jsbueno

+0

Извините, но попытка 'pdb.gimp_vectors_export_to_file (img," C: /Users/Public/Documents/output.svg "," C: /Users/Public/Documents/output.svg ")' все еще не работает. Также согласно документации pdb функция _vectors_export_to_file_ не принимает необработанный файл в параметре. Решение должно быть очень простым, но я все еще застрял. – Swe

1

Я адаптировал этот вопрос в питоне плагин вкладного, который предоставляет эту функциональность в качестве формата экспорт SVG.

Я превратил его в суть, вытащить запросы приветствия, суть может быть более функциональной, чем этот ответ.

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

Скопируйте этот источник в каталог плагинов вкладной (и сделать его исполняемым).

В моей системе, то есть ~/.gimp-2.8/plug-ins/file-svg-export.py, на окнах ее, вероятно, где-то в %appdata%.

#!/usr/bin/env python 

# GIMP Plug-in for Simple SVG Exports 

# Copyright (C) 2016 by Dylan Grafmyre <[email protected]> 
# 
# 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() 

Для использования просто File -> Export As, your file.svg

Он будет экспортировать все пути к одному файлу SVG.

+0

Ваш плагин кажется намного более« профессиональным », чем мой кусок кода, однако в то время из моего вопроса мне понадобился экспорт с одним щелчком по причинам эффективности. Спасибо за ответ в любом случае. – Swe

Смежные вопросы