PDA

Vollständige Version anzeigen : Scripte schreiben - wie fange ich am besten an?


max
04.05.2008, 02:30
Hallo zusammen.

Ich wollte mich jetzt eigentlich mal ein bisschen mit Script-Fu auseinandersetzen und lernen, eigene Scripte zu schreiben. Allerdings weiß ich nicht ganz, wie ich das angehen soll - zuerst habe ich angefangen, das Tutorial im offiziellen Handbuch durchzuarbeiten. Aber das wird von Absatz zu Absatz komplizierter und ich komme irgendwann ganz einfach nicht mehr mit. Bei den anderen Tutorials die ich im Netz gefunden habe, war das nicht anders.

Als ich damals mit HTML angefangen habe, konnte ich einfach mit einem Zweizeiler anfangen und nach und nach dazulernen, bis ich einfache Websites "bauen" konnte. Learning-by-doing halt. Anscheinend ist das hier aber alles etwas komplizierter, sodass diese Methode nicht funktioniert.

Wie habt ihr angefangen, das zu lernen? Ich hatte kein Informatik in der Schule, kann keine einzige Programmiersprache und fange praktisch bei null an.

flashnfantasy
05.05.2008, 01:20
Schaue dir Beispiele an,

weil ich habe nirgends ein Tutorial gefunden.

Und viele Sachen muß man erst im Kontext verstehen.

baz_o_matic
05.05.2008, 13:38
Mein Tipp: beschäftige dich erst mit der Programmiersprache Scheme, bevor du Script Fu angehst (Script Fu IST ein Scheme-Dialekt, der auch Zugriff auf GIMP's exportierte Funktionen erlaubt - man muss also erst mal etwas Scheme können, um damit klarzukommen).

Ein gutes Scheme-Tutorial (so du des Englischen mächtig bist) gibt es zum Beispiel hier:
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html

Gewöhnungsbedürftig sind sicher Scheme's viele Klammern ... und auch die strikte Präfix-Notation (Operatoren zuerst, dann die Operanden) kann leicht eigenwillig wirken. ;)
Andrerseits ist dieses Prinzip universell in Scheme - im Gegensatz zu anderen Programmiersprachen muss man sich keinerlei Abweichungen von diesem Schema merken. Operatoren stehen IMMER vorn, und ausführbarer Code steht IMMER in Klammern.

Beispiel:
'normale' Infixnotation: 2 * (1 + 3)Scheme-Notation: (* 2 (+ 1 3))Zum Experimentieren mit den Beispielen kannst du einfach GIMP's Skript-Fu-Konsole verwenden (dummerweise ist das Eingabefeld für Skript-Fu-Code einzeilig - aber Copy&Paste aus 'nem Editor funktioniert prima :) ).
Berechnungsergebnisse und Ausgaben deiner Scheme-Programme erscheinen dann im Hauptfenster der Konsole. Für obiges Beispiel sollte zB. irgendwo die '8' auftauchen. :)

Wenn's dir langweilig wird, kannst du über das 'Browse'-Knöpfchen den GIMP-Prozedurbrowser starten und dich durch die Liste der Funktionen wühlen, die GIMP für Skripte zur Verfügung stellt.
Wenn du den Scheme-Einstieg gefunden hast, ist das nächste spannende Projekt, diese GIMP-eigenen Funktionen durchzuprobieren, bzw. in selbstgebastelten Scheme-Funktionen zu verwenden (und dabei rauszufinden, dass diese Funktionen ihre Ergebnisse teilweise bis meist in ziemlich seltsamer Form zurückliefern).

Prima interaktiv ausprobieren lassen sich zB.

(gimp-image-list) - liefert die Liste aller gerade geöffneten Bilder (und zwar als Liste, deren erstes Element die Anzahl der offenen Bilder, und deren zweites Element ein Array mit den IDs der Bilder ist - kann mir mal jemand sagen, wozu diese komplizierte Struktur erforderlich ist, wenn es doch auch eine 'length'-Funktion gibt, mit der ich die Grösse des Arrays direkt bestimmen könnte?).

(gimp-image-get-layers image-id) - liefert die Liste aller Ebenen des Bildes mit ID 'image-id', und zwar in der gleichen Form wie gerade beschrieben (Liste mit zwei Einträgen: Anzahl und Array der IDs).

(gimp-drawable-set-visibility drawable-id wert) - macht ein 'Drawable' (zB. eine Bildebene mit ID 'drawable-id' sichtbar oder unsichtbar: 'wert' gleich 0 bedeutet 'unsichtbar', alle anderen 'sichtbar'.

Bsp:
(gimp-image-list)Antwort:

(2 #( 2 1 ))
zeigt uns, dass gerade 2 Bilder offen sind: nämlich die Bilder mit ID 2 und ID 1 (Anm.: die Bild-IDs werden von GIMP im Fenstertitel des jeweiligen Bildes mit angezeigt: 'Bildname-ID.0 ...').
Wir wollen wissen, welche Ebenen Bild mit ID 2 hat:

(gimp-image-get-layers 2)
Antwort:

(1 #( 48 ))
... und erfahren: eine Ebene, deren ID 48.
Mit dieser Info können wir jetzt an der Sichtbarkeit der Ebene rumspielen:

(gimp-drawable-set-visible 48 0)
Antwort:
(#t)Diese kryptische Antwort sagt uns: Funktion erfolgreich ausgeführt ('#t' steht kurz für 'true', und die Klammern bedeuten hier, dass es sich um eine Liste von Werten handelt - in diesem Fall nur den einen).
Der interessante Seiteneffekt sollte dabei sein, dass mit der Ausführung der Funktion die entsprechende Ebene im Bild tatsächlich unsichtbar wird.

Okay, genug. :)
Letztendlich hilft nur: viel rumspielen, und mit Scheme sowie den GIMP-Funktionen experimentieren.

Wenn du das alles geschafft hast - und du damit das nötige Handwerkszeug zusammengetragen hast - lohnt sich nochmal ein Blick in die GIMP-Doku - respektive deren Skript-Fu-Kapitel. Denn darin erfährst du, welche Schritte erforderlich sind, um Skripte dauerhaft in GIMP einzubinden (statt sie jedes Mal über die Konsole neu einzugeben).

Viel Erfolg, und viel Spass! :)

MichaJo
05.05.2008, 13:59
Du hast ja schon einigen Stoff bekommen. Schaue zusätzlich auch noch mal hier auf die Seite von Klaus,
der auch hier im Forum ist: http://www.gimp-scripte.de/

Gruß

Micha

max
05.05.2008, 15:04
Danke für die Tips, ich kämpfe mich gerade durch das Scheme-Tutorial von baz_o_matic.

Wie lange habt ihr gebraucht, bis ihr erste eigene Scripte geschrieben habt?

houz
06.05.2008, 10:41
Wenn du quasi bei Null anfängst würde ich mir mal Python ansehen. Damit kann man auch für GIMP scripten (keine Ahnung, ob nur als Plug-In oder auch als Script), und mit der Sprache kann man auch sonst was anfangen. Scheme ist eher ein Exot, der selten gebraucht wird.

P.S.: Ich bevorzuge es, meine Plug-Ins in Perl zu schreiben...

max
06.05.2008, 16:15
Python hatte ich sogar schonmal angefangen, allerdings nicht für Gimp. Das wär natürlich auch ne gute Idee, weil ich das auch anderswo mal brauchen kann. Mit Scheme war ich jetzt eh noch nicht so weit und wenn ich auch mit Python Scripte schreiben kann, dann lerne ich Python.

flashnfantasy
17.06.2008, 10:56
Die Zeit, um die Philosophie für Scripte zu verstehen ist wahrscheinlich sehr unterschiedlich lang.

Vielleicht hilft folgendes Denken:

Es gibt einen Standart-Frame, den kannst du dir aus irgendeinen einfachen Beispiel rauskopieren, der Frame besteht eigentlich nur aus der Oberfläche und einer Funktion.

Bei der Oberfläche ein paar Guidelines einhalten, zB wo soll der Script erscheinen.
Grundsätzlich gibt es auch einen identischen Aufbau, wenn der Script auf eine Layer in einem bestimmten Image angewandt werden soll.

Bei der Funktion ein paar Guidelines einhalten, zB die Bildfenster zum Schluß auffrischen, damit man die Änderung sieht.

Die ersten Scripts sind meist komplett ohne Variablen.

Befehle findest du in GIMP unter der Prozedur-Datenbank.

Die Konsole in GIMP eignet sehr hervorragend zum Testen von Scheme.

Wenn man mit Rückgabewerten von Funktionen arbeitet, dann muß man meist ein car anwenden:
(let var (car (fun ...))