Как использовать GIMP внутри скрипта Python?

GIMP позволяет вам создать плагин в Python, я хотел бы вызвать функцию GIMP, как если бы я делал это внутри одного из этих плагинов, но это возвращает следующую ошибку, поскольку GIMP не находит ни одного работающего ядра GIMP для использования.

LibGimpBase-ERROR **: gimp_wire_write_msg: the wire protocol has not been initialized aborting...

Я хотел бы знать, возможно ли это? И если да, то как?

Спасибо


person AsTeR    schedule 19.11.2011    source источник
comment
Запустить экземпляр GIMP с помощью модуля subprocess до того, как ваш скрипт начнет выполнять свою работу?   -  person Noufal Ibrahim    schedule 19.11.2011
comment
возможный дубликат Connect GIMP с PHP или Python   -  person unutbu    schedule 20.11.2011
comment
Я думаю, что это не дубликат, так как я явно спрашиваю, как это сделать без использования плагина. Я должен попробовать вызов подпроцесса, но я думаю, что это не удастся.   -  person AsTeR    schedule 21.11.2011


Ответы (3)


Расширения Python для GIMP необходимо запускать из экземпляра GIMP. Если вы хотите использовать GIMPś API из Python, вам нужно запустить GIMP без графического интерфейса (передав параметр -i из командной строки) и выполнив пользовательский вызов API — с параметром командной строки -b — так что вы можете запустить ваша программа python_fu_do_it из вызова командной строки:

gimp -i -b \(python-fu-do-it \)

Обратите внимание, что это единственный способ запустить расширения gimp-python: вам нужно запустить его из процесса GIMP.

В реальной жизни полезно сделать так, чтобы ваш gimp-плагин выставлял некоторые функции, которые выполняют действия над изображениями, которые вы хотите, и экспортировал их через сервер xmlrpc или jsonrpc, что легко сделать в Python. Затем вы запускаете этот «сервер изображений», используя описанный выше метод, и создаете автономный скрипт Python, который вызывает ваши функции, использующие gimp, через xmlrpc.

person jsbueno    schedule 20.11.2011
comment
Он думал и об этом подходе. Можете ли вы подтвердить, что это на 100% уверено, что нет способа использовать GIMP внутри Python вместо использования Python внутри GIMP? - person AsTeR; 21.11.2011
comment
Как один из авторов этого кода, я подтверждаю это вам. - person jsbueno; 21.11.2011
comment
@jsbueno есть ли какой-нибудь обозримый способ, чтобы это когда-нибудь стало возможным? - person magnetar; 26.08.2012
comment
Обратите внимание на этот ответ: если GIMP работает в фоновом режиме, это не так уж и плохо. У вас может быть Python-плагин, который создает экземпляр сервера xml-rpc и обменивается с ним данными — есть несколько способов сделать это — вам просто нужно поддерживать процесс GIMP — это не конец света. - person jsbueno; 30.08.2012
comment
С другой стороны, все возможности обработки изображений в GIMP реализованы (или вскоре будут реализованы) в GEGL — универсальной графической библиотеке. Он имеет привязки Python и не требует запуска процесса — вместо этого вы можете попробовать использовать thta, хотя GEGL Python может быть немного грубым для запуска. - person jsbueno; 30.08.2012
comment
Я обнаружил, что вам нужно добавить -b '(gimp-quit 1)', иначе он просто останется там после завершения. Если вы не хотите регистрировать свой скрипт в GIMP, вы можете просто запустить python напрямую с помощью этой командной строки: ››› gimp -i --batch-interpreter=python-fu-eval -b 'execfile(myfilename.py ); pdb.gimp_quit(1)' - person greggo; 18.01.2013

Одним из вариантов может быть создание процесса прослушивания внутри gimp в виде скрипта (это может иметь последствия для блокировки пользовательского интерфейса, здесь потребуются эксперименты), а затем заставить его прослушивать рабочую очередь beanstalkd. затем во внешних процессах размещайте рабочие запросы в очереди beanstalk, и beanstalk может затем обрабатывать эти заказы вне процесса.

С учетом всего сказанного, я могу представить, что в 99% случаев вы захотите это сделать, возможно, ImageMagick будет более подходящим выбором, чем gimp, поскольку он предназначен для тех задач, которые, как я полагаю, вас интересуют.

person Shayne O'Blisk    schedule 20.06.2013
comment
GIMP можно запустить из командной строки без пользовательского интерфейса. Он отлично работает, и вы можете поместить в него свой скрипт для прослушивания заданий. - person AsTeR; 20.06.2013

Должен сказать, что следующее утверждение неверно:

«Расширения Python для GIMP необходимо запускать из экземпляра GIMP».

Вам не нужно запускать gimp, чтобы использовать его функции, доступные через API python gimpfu.

В любой программе Python для Linux вы просто делаете следующее:

import sys  
sys.path.append('/usr/lib/gimp/2.0/python/')  
import gimpfu  

где «/usr/lib/gimp/2.0/python/» — путь к установке gimp.

С уважением, Карло.

person Karlo Smid    schedule 23.06.2012
comment
Пробовали ли вы базовый рабочий процесс: загрузка изображения + обработка + сохранение? @jsbueno рассказывает что-то еще и является соавтором - person AsTeR; 25.06.2012
comment
После того, как я попробовал базовый рабочий процесс с вызовом функций pdb, я получил ту же ошибку. Добавление gimp в путь python не является решением для запуска функций pdb без gimp. Моя ошибка. - person Karlo Smid; 27.06.2012
comment
Вы можете импортировать модули, но без запущенного GIMP это не работает - вместо этого Python завершает работу с LibGimpBase-ERROR **: gimp_wire_write_msg: проводной протокол не был инициализирован - person jsbueno; 30.08.2012