Python Skript für Gimp

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Hallo!
Ich habe https://www.gimp.org/docs/python und https://clubcomputer.at/2016/10/06/gimp-einfuehrung eingehends studiert und auch vorhandene Skripte für Gimp studiert, aber ich komme nicht weiter. das Skript wird zwar geladen, aber im Menü nicht angezeigt. Auch die Befehle config,... funktionieren bei mir nicht. Ausserdem: Wie kann ich bei einem Skript, das von Gimp geladen wurde, einen Fehler finden? Mit der Console (print...) ist es ja nun nicht mehr möglich. Gimpfu ist aber vorhanden. Kann mir jemand helfen?

Tschüss
gerhardf
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

gahleitner hat geschrieben:Gimpfu ist aber vorhanden.
Gimpfu?
Kannte bisher nur Script-Fu und Du benötigst zusätzlich Python-Fu. So zumindest verstehe ich die Anleitung, ausprobiert habe ich es jedoch noch nicht. Doch hier ist eine bebilderte, vielleicht geht es mit dieser einfacher:

https://docs.gimp.org/de/gimp-filters-python-fu.html
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Hallo!

Gimpfu ist das Modul, das man importieren muss, damit die Skripte in GIMP auch funktionieren. Zumindest in der Theorie. Gibt es hier jemand, der schon Skripte für Gimp geschrieben hat und mir weiterhelfen kann?
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Habe gerade meine alte Gimp-Version deinstalliert und eine neue installiert und bisher war noch alles so, wie in der verlinkten Anleitung beschrieben. In der Console steht einleitend:

[codebox=text file=Unbenannt.txt]GIMP 2.8.22 Python Console
Python 2.7.10[/code]
Mit dem Rest werde ich mich etwas später beschäftigen.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

So, bin ein wenig weiter.
Die gute Nachricht, es werden keine zusätzlichen Module benötigt, wie es aussieht scheint Gimp alles an Bord zu haben, kann mich aber auch irren. Doch ich habe da selbst Tkinter gesehen.
Die Python-Fu Scripts werden wohl als Plugins geschrieben, dann in einem Plugin-Verzeichnis von Gimp abgelegt. Wo dieses Verzeichnis zu finden ist, wird auf der folgenden Seite beschrieben. Auf der Seite wird weiterhin ein Zip-Archiv mit 12 Dateien zum Testen angeboten:

http://registry.gimp.org/node/28124

Weniger gut ist zurzeit, ich komme bereits mit dem ersten Beispiel-Plugin nicht klar. Also der Eintrag erscheint zwar im Menü unter Filter, es rührt sich nur nichts oder ich stelle mich zu dumm an. Es hilft wohl nichts, man müsste sich mehr mit Gimp und der Gimp Python Dokumentation beschäftigen.

Also, das soll das einfachste Beispiel sein, sieht ja auch einfach aus.

Code: Alles auswählen

#!/usr/bin/env python
#
# -------------------------------------------------------------------------------------
#
# Copyright (c) 2013, Jose F. Maldonado
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, 
# are permitted provided that the following conditions are met:
#
#    - Redistributions of source code must retain the above copyright notice, this 
#    list of conditions and the following disclaimer.
#    - Redistributions in binary form must reproduce the above copyright notice, 
#    this list of conditions and the following disclaimer in the documentation and/or 
#    other materials provided with the distribution.
#    - Neither the name of the author nor the names of its contributors may be used 
#    to endorse or promote products derived from this software without specific prior 
#    written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
# SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
# DAMAGE.
#
# -------------------------------------------------------------------------------------
#
# This file is a basic example of a Python plug-in for GIMP.
#
# It can be executed by selecting the menu option: 'Filters/Test/Hello world'
# or by writing the following lines in the Python console (that can be opened with the
# menu option 'Filters/Python-Fu/Console'):
# >>> image = gimp.image_list()[0]
# >>> layer = image.layers[0]
# >>> gimp.pdb.python_fu_test_hello_world(image, layer)

from gimpfu import *

def say_hello_world(img, layer) :
    ''' Display the message "Hello world" in the bottom of GIMP.
    
    Parameters:
    img : image The current image.
    layer : layer The layer of the image that is selected.
    '''
    gimp.message("Hello world")

register(
    "python_fu_test_hello_world",
    "Hello world",
    "Display a 'hello world' message",
    "JFM",
    "Open source (BSD 3-clause license)",
    "2013",
    "<Image>/Filters/Test/Hello world",
    "*",
    [],
    [],
    say_hello_world)

main()
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Ein nächstes Beispiel aus dem Zip-Archiv mit dem Dateinamen "test-say-something.py" hat funktioniert!
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

So, nun habe ich weitere ausprobiert und muss mich korrigieren. Im ersten Beispiel konnte sich noch nichts rühren, da es lediglich als Muster diente, um einen Menüeintrag zu erzeugen. Für einen Menüeintrag wird innerhalb von register() in dieser Zeile bestimmt, wo das Plugin im Menü zu finden ist.

Code: Alles auswählen

"<Image>/Filters/Test/Hello world"
Alle anderen Plugins sind augenblicklich halt auch unter "Filter -> Test -> Bezeichnung" übers Menü erreichbar und die ich bisher ausprobiert habe, funktionierten. Also z.B. test-discolour-layer-v1.py ist dann unter "Filters ->Test -> Discolour layer v1" übers Menü auswählbar und wandelt ein Bild in ein Graustufenbild. Andere Beispiele sind mit Speicherung usw., die kann jeder für sich testen. Doch Plugins schreiben sich nicht von allein und nur mit etwas über Gimp lesen, dürfte es nicht getan sein. Da wirst Du etwas mehr durcharbeiten müssen.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Also, das untere Beispiel von der Python-Fu-Seite aus dem Gimp-Handbuch ist reichlich irritierend, da kein neu erstelltes Image angezeigt wird, bevor keine Ebene mit 'gimp_layer_new' erzeugt und mit 'gimp_image_add_layer' hinzugefügt wird. Alternativ tut es auch 'gimp_display_new'. Beispiel mit der Python-Fu-Console:

[codebox=text file=Unbenannt.txt]>>> image = pdb.gimp_image_new(400, 300, RGB)
>>> pdb.gimp_display_new(image)[/code]
Dann, alles was mit gimp. beginnt, wie gimp.set_background(r, g, b), sollte unter

https://www.gimp.org/docs/python/

zu finden sein, doch alles was mit pdb. beginnt, wie im oberen Beispiel mit 'pdb.gimp_image_new' gehört zur Prozeduren-Datenbank (PDB) und ist wohl nur unter

http://oldhome.schmorp.de/marc/pdb/index.html

zu finden oder man sucht es sich innerhalb vom Prozeduren-Browser, wo es nur nicht gut beschrieben wird und schlechter zu finden ist, wenn man nicht weiß, wonach man suchen soll oder ich habe es nur noch nicht ausführlicher bei Gimp gefunden.

Dann noch eine Feststellung, das erste "Hello world" Beispiel war doch mehr als nur ein Muster für einen Menüeintrag, nur die Ausgabe erfolgte in der unteren Statusleiste, was ich einfach übersehen hatte, weil ich von der Mitte aufwärts auf etwas wartete.

Sollte nun eigentlich für einen Einstieg genügen.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Irgendwie ein schreckliches Durcheinander, funktioniert zumindest auch.

[codebox=text file=Unbenannt.txt]>>> image = gimp.Image(400, 300, RGB)
>>> gimp.Display(image)[/code]
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Als Nachtrag, falls jemand danach suchen sollte, das scheint endlich die die richtige Referenz zu sein, nur hatte Google mir die erst später ausgespuckt: GIMP Library Reference Manual
Im Prozeduren Browser von Gimp sind einige von den älteren mit Deprecated gekennzeichnet, wobei aber neuere aufgeführt werden, wie zum Beispiel:

[codebox=text file=Unbenannt.txt]'gimp_image_add_layer'
Deprecated: Use 'gimp-image-insert-layer' instead.[/code]

Eine erste Beschreibung für Python Plugins ist über die Python-Fu Console einsehbar.

[codebox=text file=Unbenannt.txt]>>> import gimpfu
>>> help(gimpfu)[/code]
gahleitner
User
Beiträge: 35
Registriert: Montag 1. Mai 2017, 09:57

Hallo!
Ich habe folgenden Code für GIMP, der ein Fenster generiert und nach dem drücken von Ok auf ein eigenes Skript (new) zugreift. Es soll aber ohne das Fenster sofort auf das Skript zugreifen. Wie mache ich das?

Code: Alles auswählen

#!/usr/bin/env python

from gimpfu import *
#from new import *
#new(10)

 
def say_hello_world(img, layer) :
    ''' Display the message "Hello world" in the bottom of GIMP.
   
#   Parameters:
#   img : image The current image.
#   layer : layer The layer of the image that is selected.
   '''
    gimp.message("Hello world")
    from new import *
#    macrorecorder(new) 

register(
    "",#python_fu_test_hello_world",
    "",#Hello world",
    "",#Display a 'hello world' message",
    "",
    "",#Open source (BSD 3-clause license)",
    "2013",
    "<Image>/Filters/Macrorecorder",
    "",
    [],
    [],
    say_hello_world)

 
main()
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Das ist irgendwie interessant, was man so alles aus einem einfachen Hallo-Welt-Script machen kann. Ich würde eher im oben bereits verlinkten "GIMP Library Reference Manual" einige der über 1.000 Prozeduren näher betrachten. Zumindest bin ich so vorgegangen. Zuerst einmal die herausgesucht, die mir für einen Einstieg geeignet erschienen, dann diese in der Python Fu Console getestet, dann in ein Plugin übernommen. Zwischendurch Notizen und eine Liste mit Verweisen zu Webseiten erstellt, die eventuell noch nützlich sein könnten.

Ohne Grundlagen nur umherstochern, dafür ist Python und Gimp zu komplex, so kann das wohl nichts werden.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

So, noch kein weltbewegendes Beispiel, es wird nur ein neues Bild erstellt und mit einer Hintergrundfarbe gefüllt.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gimpfu import *

def erstelle_neues_image(image, ebene):
    width  = 600
    height = 400

    # Ein neues Image erzeugen.
    image = pdb.gimp_image_new(width, height, RGB)
    # Für das Image mindestens eine Ebene erzeugen und die Ebene hinzufügen.
    ebene = pdb.gimp_layer_new(
            image, width, height, RGB, "ebenen-name", 100, NORMAL_MODE)
    pdb.gimp_image_insert_layer(image, ebene, None, 1)
    # Eine Hintergrundfarbe auswählen und das Image damit füllen.
    pdb.gimp_context_set_background((255,138,0))
    pdb.gimp_drawable_fill(ebene, BACKGROUND_FILL)
    # Das neu erzeugte Image anzeigen.
    pdb.gimp_display_new(image)


register(
    "erstelle_neues_image",                       # Plugin Name
    "Neues Image erstellen",                      # Kurzbeschreibung
    "Ein neues Image erstellen",                  # Längere Beschreibung
    "Mele Melewo",                                # Plugin Autor
    "MIT-Lizenz",                                 # Angaben zur Lizenz
    "2017",                                       # Jahr der Veröffentlichung
    "<Image>/Filters/Eigene/Neues Image",         # Position im Menü mit Label
    "*",                                          # Akzeptierte Image-Typen
    [],                                           # Input Parameter
    [],                                           # Output Resultate
    erstelle_neues_image                          # Name der Funktion
    )

main()
Was mich stört, ich komme nicht von diesen Sternchen-Import weg. In der Python-Fu-Console lief es mit gimp:

Code: Alles auswählen

from gimpfu import gimp
Als Plugin wurde es nur mit gimp nicht angezeigt ohne und das folgende Beispiel erzeugte lediglich einen Menüeintrag. Es wurde aber nur der Menüeintrag angezeigt, nicht das Bild:

Code: Alles auswählen

from gimpfu import gimp, register, main
Und ich sehe nicht, was fehlen könnte, denn ohne Sternchen wird keine Fehlermeldung ausgegeben, sondern das Plugin oder das Image einfach nur nicht geladen. Bleibe wohl erst einmal beim Sternchen.

Was ich bisher nicht verstehe, ist die Reihenfolge bei "gimp_layer_new". Eigentlich steht bei der Reihenfolge der Parameter geschrieben:

[codebox=text file=Unbenannt.txt]image_ID : The image to which to add the layer.
name : The layer name.
width : The layer width.
height : The layer height.
type : The layer type.
opacity : The layer opacity.
mode : The layer combination mode.
Returns : The newly created layer.[/code]
https://developer.gimp.org/api/2.0/libg ... -layer-new

Wenn ich "name" aber nicht zwischen "type" und "opacity" setze, dann wirft die Console einen Fehler, ebenso wenn ich den weglassen würde.
BlackJack

@Melewo: Du verwendest `pdb` und solltest deswegen besser mit dem PDB-Browser in Gimp schauen welche Argumente *die* Funktionen in welcher Reihenfolge erwarten. Da steht `name` zwischen `type` und `opacity`.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

@BlackJack: Danke, jetzt sehe ich es, dann ist es ja richtig. Dann muss ich wenigstens mit dem vergleichen, was der PDB-Browser anzeigt.

Allgemein: Meine eigenen erscheinen nun im PDB-Browser mit vorangestellten "python-fu-" wie bei "python-fu-erstelle-neues-image" und Bindestriche werden bei Übernahme mit "Apply" in Unterstriche gewandelt, wo es dann so in der Python-Fu-Console erscheint:

[codebox=text file=Unbenannt.txt]pdb.python_fu_erstelle_neues_image(image, drawable)[/code]
Und so ließe es sich dann mit dieser Console aufrufen.

[codebox=text file=Unbenannt.txt]>>> image = None
>>> drawable = None
>>> pdb.python_fu_erstelle_neues_image(image, drawable)[/code]
None, weil ein Image ja erst erzeugt werden soll und Gimp ohne Angaben von Argumenten nur meckerte und selbst bei Message bei () nur ein Widget öffnete und nach zwei Werten fragte. Sicherlich lässt sich da halt noch vieles über die Benutzung von Input-Parametern regeln, doch immer eins nach dem anderen.
BlackJack

@Melewo: Wenn Du die Argumente sowieso nicht verwendest würde ich denen ja in der Funktionsdefinition `None` jeweils als Defaultwert verpassen, dann braucht man auch nicht unnötig etwas übergeben.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

@BlackJack: Ja, der Gedanke ist erst einmal gut. Die Werte brauche ich nur beim Aufruf über die Console angeben, ohne Console, also bei Aufruf über das Menü hingegen nicht. Über Menü lässt sich jedoch bisher kein Filter aufrufen, bevor ein Image geöffnet wird ist alles grau und ein Filter bezieht sich dann auf das aktuell geöffnete Image. Mit dem vorausgehenden Beispiel wird dann ein zweites Image in einem eigenen Fenster erzeugt.

Ein anderes Beispiel habe ich unter Help/ gespeichert, das ist zwar anfänglich nicht ausgegraut, doch ich denke, es kommt auf die zu übergebenen Parameter an, denn da erfolgt eine Abfrage ob mit oder ohne None:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gimpfu import *

def erstelle_begruessung(image=None, layer=None):
    gimpversion  = gimp.version                             # Tupel mit 3 Integer-Werten
    begruessung  = "Hello Welt!\nGimp Version "
    begruessung += ".".join(map(str, gimpversion))
    gimp.message(begruessung)

register(
    "erstelle_begruessung",                                 # Plugin Name gleich Funktions-Name
    "Begrüßung erstellen",                                  # Kurzbeschreibung
    "Einen Eintrag mit Begrüßung im Hilfe-Menü erstellen.", # Längere Beschreibung
    "Mele Melewo",                                          # Plugin Autor
    "MIT-Lizenz",                                           # Angaben zur Lizenz
    "2017",                                                 # Jahr der Veröffentlichung
    "<Image>/Help/Hinweise/Begrüßung",                      # Position im Menü mit Label
    None,                                                   # Akzeptierte Image-Typen
    [],                                                     # Input Parameter
    [],                                                     # Output Resultate
    erstelle_begruessung                                    # Name der Funktion
    )

main()
Ohne das ein Bild geöffnet ist:
Bild

Wenn bereits ein Bild geöffnet ist:
Bild

Und dann noch ein Beispiel aus diesem auf der vorausgehenden Seite erwähnten Zip-Archiv, da wird etwas übergeben, doch dafür ist es anfänglich ausgegraut und lässt sich nicht betätigen, bevor ein Image geöffnet wurde.

Code: Alles auswählen

...

    "*",
    [
        (PF_STRING, "message", "Message to display", "hello")
	],
    [],
    say_something_help)

main()
Bevor ein Image geöffnet wurde bleibt der Menüpunkt ausgegraut:
Bild

Oder einfacher, eigentlich funktioniert alles, aber selbst unter Hilfe erst dann, wenn ein Bild geöffnet wurde. Vielleicht hängt es auch damit zusammen, dass es außer <Image> für die Registrierung nichts anderes mehr geben soll, <Toolbox> wurde in neueren Versionen entfernt, las ich. Und sicherlich werde ich mich noch mit diesen Input-Parametern auseinandersetzen müssen.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Habe zwei Beispiele aus dem Jahre 2009 gefunden, da soll es noch funktioniert haben, eine Registrierung mit Menüeintrag nur mit menu="" zu erreichen, beide Bespiele funktionierten bei mir nicht mehr.

Code: Alles auswählen

# no image or drawable parameters
...
# enabled even if no image open
...
menu="/Filters/Languages/Python-Fu"
Heute scheint es nichts mehr außer

Code: Alles auswählen

"<Image>/Filters/Languages/Python-Fu"
zu geben. Doch damit kann man leben, wenn man sich darauf einstellt. Der Code aus dem Rumpf der Funktion lässt sich vorher in der Python-Fu-Console testen, ist kein Problem. Und das fertige Plugin lässt sich ebenfalls über die Python-Fu-Console testen. Doch ob im Funktionskopf None benutzt wird oder nicht, scheint Jacke wie Hose zu sein, denn auch mit None, wie in

Code: Alles auswählen

def erstelle_neues_image(image=None, ebene=None)
kommt:

[codebox=text file=Unbenannt.txt]Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'image' is not defined[/code]
Aber auch das ist eigentlich kein Problem, da nur für einen Test

[codebox=text file=Unbenannt.txt]>>> image = None
>>> drawable = None
>>> pdb.python_fu_erstelle_neues_image(image, drawable)[/code]
oder

[codebox=text file=Unbenannt.txt]>>> image = gimp.image_list()[0]
>>> drawable = image.layers[0]
>>> pdb.python_fu_bearbeite_image(image, drawable)[/code]
einzugeben. Bei einem Aufruf über Menü ist es ja nicht erforderlich. Nur wie man Fehler bei der Registrierung zumindest in eine log.txt schreiben könnte, da sollte sich noch etwas finden lassen. Alles was ich bisher außer * Sternchen beim Import sah, war nicht einleuchtend.

Code: Alles auswählen

import gimp
from gimpfu import pdb
from gimpfu import *

# Quelle: registry.gimp.org/node/18305
Was soll das z.B., wenn in der letzten Zeile doch ein * folgt?
BlackJack

@Melewo: Wobei kommt der `NameError`?

Edit: Du rufst es dann schon *ohne* Argumente auf, und nicht mit einem nicht definierten `image` oder? Also ``pdb.python_fu_erstelle_neues_image()``.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Wenn ich definiere

Code: Alles auswählen

def erstelle_neues_image(image=None, ebene=None):
sieht es ohne diese beiden vorausgehenden Zeilen so aus:

[codebox=text file=Unbenannt.txt]>>> image = None
>>> drawable = None[/code]
so aus:

[codebox=text file=Unbenannt.txt]
>>> pdb.python_fu_erstelle_neues_image(image, drawable)
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'image' is not defined
>>> [/code]
Wenn ich definiere

Code: Alles auswählen

def erstelle_neues_image():
werden nicht einmal die Bindestriche vom PDB-Browser bei Apply umgewandelt:

[codebox=text file=Unbenannt.txt]>>> python-fu-erstelle-neues-image
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'python' is not defined[/code]
Wenn ich die allein korrigiere:

Code: Alles auswählen

python_fu_erstelle_neues_image()
# Oder:
pdb.python_fu_erstelle_neues_image()
[codebox=text file=Unbenannt.txt]>>> python_fu_erstelle_neues_image()
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'python_fu_erstelle_neues_image' is not defined[/code]
Oder:
[codebox=text file=Unbenannt.txt]>>> pdb.python_fu_erstelle_neues_image()
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: wrong number of parameters
>>> [/code]
Und irgendwann hatte ich dann auch mal einen anderen Hinweis, der besagte, dass zwei Argumente erwartet werden.

Eigentlich egal was man macht, alles bezieht sich wohl immer auf ein im Fenster geöffnetes Image und das lässt sich in der Console damit abfragen

[codebox=text file=Unbenannt.txt]>>> image = gimp.image_list()[0]
>>> drawable = image.layers[0] [/code]
und dann ist auch alles definiert und es sollte keine Probleme mehr geben und in der dritten Zeile könnte pdb.python_fu_name_des_plugins(image, drawable) folgen.

Und neben diesen bereits geöffneten Image können dann halt weitere neu erstellt oder kopiert oder verfremdet und bearbeitet oder was auch immer werden. Um diese beiden Angaben braucht man sich nicht zu kümmern, wenn man ein Plugin übers Menü aufruft, dann erledigt das Gimp automatisch.
Antworten