Home / LinuxUser / 2005 / 02 / Gimp-Scripts schreiben

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Programmiertes Malen

Gimp-Scripts schreiben

PDB-Funktionen an die Arbeit

Die Arbeitsfunktion muss sich nun erst einmal ihren Namen verdienen, denn bisher tut sie nichts. Eine PDB-Suche nach select findet einige Funktionen. Die richtige heißt gimp_ellipse_select. Der erste Parameter ist das Bild selbst, das dem ersten Parameter der Arbeitsfunktion entspricht. Die folgenden vier geben die Größe der Auswahl an, als X-Wert, Y-Wert, Breite (width) und Höhe (height). Der Parameter option legt fest, ob die Auswahl hinzugefügt wird (CHANNEL_ADD_OP), ob sie eine bestehende ersetzt (CHANNEL_REPLACE_OP) und so fort. Der PDB-Browser zeigt übrigens, wie auch für weitere Parametertypen, geringfügig andere Namen an: zum Beispiel GIMP_CHANNEL_ADD_OP. In Python-Skripts lassen Sie das GIMP_ einfach weg.

Weist man antialias den Wert TRUE zu, glättet Gimp die Auswahllinie. Genauso funktioniert feather, das für einen stufenweisen Übergang sorgt. Der letzte Parameter feather_radius legt die Breite dieses Übergangs fest. Im Skript steht an dieser Stelle kein fester Wert, sondern die Eingabevariable feather_in, die der Benutzer verändern kann (Zeile 5 in Listing 2).

Listing 2

Arbeitsfunktion

def python_vignette(img, drawable, feather_in, opacity_in):
   width = drawable.width
   height = drawable.height
   pdb.gimp_ellipse_select(img, 0, 0, width, height, CHANNEL_OP_REPLACE, TRUE, TRUE, feather_in)
   pdb.gimp_selection_invert(img)
   pdb.gimp_edit_bucket_fill(drawable, FG_BUCKET_FILL, MULTIPLY_MODE, opacity_in, 0, 0, 0, 0)
   pdb.gimp_selection_none(img)

Alle bisher verwendeten Methoden gehören zum Objekt pdb, werden also nach dem Schema pdb.methode() aufgerufen. Deshalb kann man kaum noch von Objektorientierung sprechen, denn die zeichnet sich ja gerade dadurch aus, dass Methoden und Objekte sachlich zusammengehören. Allerdings kennt Gimp-Python auch objektorientierte Formulierungsalternativen: zum Beispiel funktioniert statt pdb.gimp_add_layer(img, ...) auch img.add_layer(...). Das heißt, man ruft die Methode gimp_add_layer() des Objekts img auf, dafür fällt img als Parameter weg. In dieser Form sind die Funktionen im PDB-Browser nicht dokumentiert, sodass wieder Forschungsarbeit nötig wird.

Die Methode gimp_selection_invert kehrt einfach die aktuelle Auswahl um. Schließlich füllt gimp_edit_bucket_fill den ausgewählten Bereich mit der aktuellen Vordergrundfarbe. Dafür sorgt der zweite Parameterwert FG_BUCKET_FILL; stünde hier PATTERN_BUCKET_FILL, würde das Werkzeug das ausgewählten Füllmuster verwenden.

Der folgende Parameter legt fest, auf welche Art die neue Farbebene auf den Hintergrund aufgetragen wird. Der Wert NORMAL_MODE ersetzt die alte Farbschicht einfach. Der im Beispiel verwendete MULTIPLY_MODE sorgt dafür, dass Gimp den alten und den neuen Farbton mischt. Die zur Verfügung stehenden Modi listet unter anderem das Ebenen-Menü auf, die zugehörigen Schlüsselwörter der PDB-Browser (allerdings wieder mit einem überflüssigen GIMP_). Probieren Sie doch mal spaßeshalber DISSOLVE_MODE aus.

Undo abschalten

Beim nächsten Parameter legt der Eingabewert opacity_in die Deckkraft für das Füllen fest. Eine große Zahl sorgt für einen dunkleren, eine kleinere Zahl für einen helleren Rand. Der Vollständigkeit halber entfernt das Skript die Auswahl mit gimp_selection_none wieder. Alle Schritte lassen sich übrigens mit Undo rückgängig machen, denn Gimp führt bei Skripts genauso intern Buch, wie bei der interaktiven Arbeit. Die Funktion gimp_image_undo_disable schaltet diese Buchführung und damit auch Undo ab.

Startet man das Skript mit einem geöffneten Bild, sieht das Ergebnis ungefähr so aus, wie in Abbildung 2. Der Effekt wurde etwas übertrieben gewählt, damit er im Bild besser sichtbar ist. Etwas weniger Deckkraft wäre hier besser. Das komplette Skript finden Sie ebenfalls auf unserem FTP-Server.

Abbildung 2: Ein Beispielbild vor und nach der Anwendung des selbstgeschriebenen Vignette-Skripts.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 69 Punkte (1 Stimme)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...