Nachdem ich im ersten Tutorial ein paar Grundlagen des Scripting gezeigt habe und wir ein Script aufgezeichnet haben, wollen wir nun unser erstes richtiges Script schreiben. Es soll am Ende eine beliebige Anzahl an Kreisen zeichnen können. Ich gehe davon aus, dass keine VB-Kenntnisse vorhanden sind und werde deshalb die Schritte (am Anfang) ausführlich erläutern.
1.Allgemeiner Aufbau einer Scriptdatei
Der Allgemeine Teil in einem PS-Script sieht immer gleich aus, daher habe ich ihn mir als ein Template mit folgendem Inhalt gespeichert:
Erklärungen:
Option Explicit
Dies ist ein VB Befehl, der angibt, dass alle Variablen deklariert werden müssen. (Ist glaube nicht zwingend erforderlich, hab ich mir aber von VB so angewöhnt.)
Dim appref, docref, startRulerUnits
Damit werden 3 Variablen deklariert. Die Bezeichnungen habe ich aus dem Scripting Guide übernommen, ihr könnt sie natürlich benennen wie ihr wollt.
Set appref = CreateObject("Photoshop.Application")
Einfach ausgedrückt: wir weisen PS der Variablen appref zu, so dass wir mit ihr auf PS zugreifen können
startRulerUnits = appref.Preferences.RulerUnits
Wir weisen der Variablen die aktuellen Einheiten von PS zu.
appref.Preferences.RulerUnits = 5 'Pixel
Wir stellen die Einheiten in PS auf px, da es sich hiermit am leichtesten arbeiten lässt. (nach dem ' stehen nur Kommentare) Jetzt wird auch der vorige Schritt klar. Da wir die Einheiten umstellen, müssen wir uns vorher die aktuellen Einstellungen merken, um sie am Ende wieder herstellen zu können.
If appref.Documents.Count <> 0 Then
Set docref = appref.ActiveDocument
Else
Set docref = appref.Documents.Add(500, 500, 72, "Unbenannt1.psd")
End If
Mit Set docref = appref.ActiveDocument weisen wir der Variable docref das aktuell geöffnete Dokument in PS zu. Die If-Else-EndIf-Anweisung könnten wir uns theoretisch sparen, aber dann würde es zu einer Fehlermeldung kommen, wenn kein Dokument geöffnet ist. Also wird zuerst abgefragt, Ob die Anzahl der geöffneten Dokumenteungleich 0 ist (man hätte logscherweise auch >0 benutzen können). Ist das der Fall, wird der Befehl ausgeführt, falls nicht, wird der Befehl unter der Else Anweisung ausgeführt. Dieser erstellt ein neues Dokument mit 500x500px, 72dpi Auflösung und dem Namen Unbenannt1.psd“ So, dass war auch schon das Template, wir stellen nur noch am Ende mit appref.Preferences.RulerUnits = startRulerUnits die urspünglichen Einheiten wieder her.
2. Eine kreisförmige Auswahl erstellen
Ich hatte im ersten Tutorial schon erwähnt, dass mir keine Möglichkeit bekannt ist direkt mit Befehlen eine kreisförmige Auswahl zu erstellen, also bedienen wir uns bei der vom SL aufgezeichneten Datei (siehe TUT1). Wir erinnern uns, der Code
...zeichnet eine kreisförmige Auswahl im aktuellen Dokument. Da wir ja die Koordinaten schon durch Variablen ersetzt haben, müssen wir sie natürlich auch deklarieren und ihnen Werte zuweisen. (Wie das aussieht...s.u.)
Nun verschieben wir den aufgezeichneten Code in ein Prozedur, die wir über ihren Namen jederzeit wieder aufrufen können und übergeben ihr auch gleich noch die Werte für die Koordinaten. Schreiben wir also über dem aufgezeichneten Teil: Sub Auswahl (oben, unten, rechts, links) und darunter End Sub
Aufrufen können wir das Ganze jetzt an jeder beliebigen Stelle im Programmcode (auch mehrfach) mit Auswahl oben, unten, rechts, links. Testen werden wir das gleich, vorher noch ein neuer Befehl: docref.Selection.Stroke appref.ForegroundColor, 2. Dieser bewirkt dasselbe wie der Befehl im Menü Bearbeiten > Kontur füllen. Er füllt also die Kontur mit der eingestellten Vordergrundfarbe und 2px Kantenstärke. Das ist auch schon alles, was man braucht um Kreise/Ellipsen zu zeichnen. Der Code sollte bisher so aussehen:
Nun kommt erstmal wieder die Zeit zum testen und experimentieren, bevor wir das Ganze etwas vereinfachen.
3.Kreise zeichnen
Es wäre ganz schön übel, wenn man die Kreise alle so zeichnen sollte, da bräuchte man keine Scripte. Also vereinfachen wir den Code ein wenig, indem wir uns einer For-Next-Schleife bedienen. Der Syntax der Schleife sieht folgendermaßen aus:
Wir wollen 3 Kreise im Abstand von 50px zeichnen, also schreiben wir in unser Script (nachdem wir alles ausser dem Template und der Prozedur Auswahl wieder gelöscht haben):
Was hier gemacht wird dürfte klar sein, wenn man sich den Code anschaut.
Natürlich müssen wir die eingeführte Variable i vorher noch deklarieren mit Dim i (oder hinter die anderen Variablen schreiben). Das muss man bei jeder neuen Variable machen, ich werde es deshalb nicht immer extra dazuschreiben.
Jetzt sieht doch unser Code schon etwas besser aus. Wollen wir jetzt aber den Abstand und/oder die Konturstärke ändern, müssen wir jedes Mal die gewünschten Werte im Code suchen und ändern. Wir führen deshalb 2 neue Variablen ein: abst (für den Abstand) und kntr (für die Konturstärke) . Ich weiß, die Namen sind nicht sonderlich gut gewählt, aber sie sind kurz (schreibfaul) und halbwegs Aussagekräftig. Ihr könnt sie natürlich auch "Abstand" und "Kontur" nennen, je nach Belieben.
Unser Code sieht z.Z. so aus:
Jetzt findet man die Werte schneller und kann sie abändern. Dasselbe machen wir auch für die Anzahl der Kreise, ich wette ihr kommt selber drauf wie das geht.
Wäre es aber nicht noch einfacher, wenn wir sie nicht im Script ändern müssen, sondern uns das Script nach den Werten fragt? Dafür gibt’s in VB den Befehl "Inputbox", dessen Syntax folgendermassen ausschaut:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]).
Wir wollen gefragt werden, welchen Abstand wir für die Kreise haben wollen und welche Konturstärke. Unser Code sieht also folgendermassen aus:
Was die Argumente im einzelnen für Auswirkungen haben, lässt sich durch ein wenig experimentieren einfach feststellen.
So, das solls auch schon für dieses Tut gewesen sein. Ich denke, als Grundlage ist das erstellte Script gut zu gebrauchen, und es lässt sich auch einfach abändern oder ergänzen. Ich hoffe hiermit einen kleinen Einblick in das Scripten mit PS gegeben zu haben. Sollte es zu ausführlich gewesen sein – sorry, aber auch absolute Anfänger sollte es verständlich vermittelt werden.
Hier zum Vergleich noch mal das fertige Script:
Lust, selbst einen Artikel zu schreiben?
Das Photozauber Team dankt für jede Unterstützung Eurerseits.
