Schreiben eines GIMP-Python-Skripts
-
11-12-2019 - |
Frage
Was ich tun möchte, ist, Gimp aus einem Python-Programm zu öffnen (vielleicht mit subprocess.Popen), und gleichzeitig startet Gimp mit einem Python-Skript, das ein Bild öffnet und eine Ebene hinzufügt ...Nun, wie kann ich das erreichen (ich wünschte, GIMP hätte eine bessere Dokumentation ...)?
Aktualisieren:
Ich tat dies: subprocess.Popen(["gimp", "--batch-interpreter" , "python-fu-eval" , "-b" ,"\'import sys; sys.path.append(\"/home/antoni4040\"); import gimpp; from gimpfu import *; gimpp.main()\'"])
,aber selbst wenn die Konsole sagt „Batch-Befehl erfolgreich ausgeführt“, passiert nichts ...
Update2:
from gimpfu import *
def gimpp():
g = gimp.pdb
images = gimp.image_list()
my_image = images[0]
layers = my_image.layers
new_image = g.gimp_file_load_layer("/home/antoni4040/Έγγραφα/Layout.png")
my_image.add_layer(new_image)
new_layer = g.gimp_layers_new(my_image, 1024, 1024, RGBA_IMAGE, "PaintHere", 0, NORMAL_MODE)
my_image.add_layer(new_layer)
register('GimpSync', "Sync Gimp with Blender", "", "", "", "", "<Image>/SyncWithBlender", '*', [], [], gimpp)
main()
Lösung
Ok, ich habe es endlich zum Laufen gebracht.Ich habe das verwendet GIMP-Python-Skripting um ein Gimp-Plugin zu erstellen, das eine Menge Dinge tun kann, einschließlich der von Ihnen erwähnten Ebenen.Dann können Sie Gimp einfach über die Befehlszeile ausführen und Argumente an das Python-Gimp-Skript übergeben.Der Artikel Verwenden von Python-Fu im Gimp-Batch-Modus war eine hervorragende Ressource, um zu lernen, wie man Gimp-Plugins über die Befehlszeile aufruft.Das folgende Beispiel lädt das angegebene Bild in Gimp, dreht es horizontal, speichert und beendet Gimp.
flip.py ist das Gimp-Plug-In und sollte in Ihrem Plug-In-Verzeichnis abgelegt werden, das in meinem Fall ~/.gimp-2.6/plug-ins/flip.py war.
flip.py
from gimpfu import pdb, main, register, PF_STRING
from gimpenums import ORIENTATION_HORIZONTAL
def flip(file):
image = pdb.gimp_file_load(file, file)
drawable = pdb.gimp_image_get_active_layer(image)
pdb.gimp_image_flip(image, ORIENTATION_HORIZONTAL)
pdb.gimp_file_save(image, drawable, file, file)
pdb.gimp_image_delete(image)
args = [(PF_STRING, 'file', 'GlobPattern', '*.*')]
register('python-flip', '', '', '', '', '', '', '', args, [], flip)
main()
Vom Terminal aus könnte man Folgendes ausführen:
gimp -i -b '(python-flip RUN-NONINTERACTIVE "/tmp/test.jpg")' -b '(gimp-quit 0)'
oder über Windows cmd:
gimp-console.exe -i -b "(python-flip RUN-NONINTERACTIVE """<test.jpg>""")" -b "(gimp-quit 0)"
oder Sie können dasselbe über ein Python-Skript ausführen, indem Sie Folgendes verwenden:
from subprocess import check_output
cmd = '(python-flip RUN-NONINTERACTIVE "/tmp/test.jpg")'
output = check_output(['/usr/bin/gimp', '-i', '-b', cmd, '-b', '(gimp-quit 0)'])
print output
Ich habe beide getestet, um sicherzustellen, dass sie funktionieren.Sie sollten sehen, dass das Bild nach jeder Skriptausführung gespiegelt wird.