Wir alle kennen Adobe Illustrator und seine Benutzeroberfläche. In unseren täglichen kreativen Aufgaben verwenden wir viele Funktionen, wie zum Beispiel: Menü, Paletten, Farben, Plug-Ins und Werkzeuge. Wir verwenden diese Funktionen in Form einer Benutzeroberfläche. Diese Funktionen der Benutzeroberfläche werden durch verschiedene Skripts und Plug-Ins an uns weitergegeben.
In einer einfacheren Art und Weise können wir Skripts codieren, um Aufgaben zu automatisieren oder in Illustrator einige Effekte zu erzielen. Folgen Sie den Anweisungen, um zu erfahren, wie das geht. In diesem Lernprogramm werden Sie in Javascript ein Skript programmieren, das ein mit einem flachen Prozess gefülltes Objekt in seinen zugehörigen Verlauf umwandelt.
Möchten Sie auf die vollständigen Vector Source-Dateien und herunterladbaren Kopien jedes Tutorials zugreifen, einschließlich dieses Tutorials? Nehmen Sie an Vector Plus für nur 9 € pro Monat teil.
Wir möchten, dass dieses Skript eine sehr einfache Aufgabe ausführt. Wenn ein Benutzer in Adobe Illustrator Objekte auswählt, die mit einer flachen CMYK-Farbe gefüllt sind, und dieses Skript ausführt; Die Objekte werden in eine entsprechende CMYK-Farbverlaufsfüllung umgewandelt. Der Ausgabegradient ist etwas ähnlich einem Gradientenüberlagerungseffekt, der im Multiplikationsmodus zu sehen ist. Dies ist in der Abbildung unten dargestellt.
Ziel unseres Skripts ist es daher, ein flaches, mit CMYK gefülltes Objekt in einen Dunkel-zu-Licht-Übereinstimmungsgradienten umzuwandeln. Dies ist eine einfache Aktion, die eine gute Übung ist, um zu lernen, wie Sie ein Skript für Illustrator erstellen.
Die Logik zum Umwandeln einer flachen Farbe in einen Dunkel-zu-Licht-Gradienten lässt sich in fünf einfachen Schritten verstehen:
Woher, gShift ist der Betrag der Gradientenverschiebung, der vom Benutzer eingegeben wird. Der obige Algorithmus kann leicht aus der unten gezeigten bildlichen Darstellung verstanden werden.
Neben der Kernlogik werden wir einige Validierungen implementieren und prüfen, ob das Skript ordnungsgemäß funktioniert. Diese Validierungen werden in verschiedenen Phasen dieses Tutorials behandelt. Bevor wir uns dem eigentlichen Tutorial zuwenden, sollten wir uns mit einigen Voraussetzungen vertraut machen.
Dieses Tutorial erfordert einige Grundkenntnisse in Bezug auf Skripte und deren Umgebung. Um sich mit der Skriptumgebung von Illustrator vertraut zu machen, können Sie einen kurzen Einblick in die Dokumentation des Installationsordners von Illustrator erhalten. Gehen Sie zu Installationsverzeichnis \ Adobe \ Adobe Illustrator CS3 \ Scripting \ Documentation. Hier finden Sie die folgenden Dokumente, um mit JavaScript zu beginnen:
Es gibt drei Arten von Skripts, die wir für Illustrator schreiben können. Diese sind: AppleScript, JavaScript und VBScript. Da JavaScript sowohl unter Windows als auch unter Mac OS unterstützt wird, werden wir unsere Logik in JavaScript codieren. Die Syntax und Notationen sind dem Standard-JavaScript sehr ähnlich. Der einzige Unterschied besteht in der Erweiterung. Bei Illustrator bezeichnen wir alle JavaScript-Dateien mit einer Erweiterung .jsx anstelle des gewöhnlichen .js Erweiterung.
Sie können zwar das gesamte JavaScript in einem beliebigen bevorzugten Texteditor codieren. Es ist ratsam, die Adobe ExtendedScript Toolkit. Mit dieser Anwendung können wir unseren Code synchron mit Illustrator ausführen, debuggen, testen und prüfen.
Hinweis: In diesem Lernprogramm wird das ExtendedScript Toolkit mit einem kurzen Formular (ESTK) gekennzeichnet.
Öffnen Sie Adobe ExtendedScript Toolkit und erstellen Sie eine neue JavaScript-Datei. Wählen Sie als Nächstes Adobe Illustrator aus der Dropdown-Liste für die Zielanwendung aus. Dies teilt der ESTK mit, dass wir JavaScript für eine bestimmte Anwendung, z. B. Adobe Illustrator, schreiben.
Fügen Sie im Code-Bearbeitungsbereich die folgenden Codezeilen ein:
if (app.documents.length> 0) alert ("Dokumente sind verfügbar"); else alert ("Keine Dokumente verfügbar");
Im obigen Code prüfen wir, ob in Illustrator aktuell geöffnete Dokumente vorhanden sind. Dies erfolgt über
app.documents.length
. Das oberste Objekt in einem beliebigen Adobe Application DOM ist das Anwendungsobjekt. Als Nächstes folgt das Dokumentobjekt, das Objekte wie Farben, Ebenen, Text, Seiten usw. enthält. Speichern Sie diese Datei auf Ihrer Festplatte als "test.jsx".
Es gibt zwei Möglichkeiten, das Skript auszuführen:
Wenn Sie Ihr Skript über ESTK ausführen möchten, drücken Sie die Wiedergabetaste (siehe unten).
Dadurch wird automatisch die Adobe Illustrator-Anwendung gestartet und die Warnmeldung generiert. Sie können die Ausführung anhalten oder stoppen, indem Sie die Pause- bzw. Stop-Taste drücken.
Um dieses Skript in Illustrator auszuführen, gehen Sie zu Datei> Skripts> Anderes Skript (Befehl + F12) und suchen Sie die neu erstellte Datei "test.jsx". Nachdem Sie auf Öffnen geklickt haben, wird das Skript ausgeführt.
Was hast du gesehen? Eine Warnmeldung "Keine Dokumente verfügbar."
Erstellen Sie als Nächstes ein paar neue Dokumente in Illustrator und führen Sie dieses Skript erneut aus. Diesmal wird eine Warnmeldung angezeigt: "Dokumente sind verfügbar."
Bis zu diesem Punkt haben wir ein kleines Stück Code geschrieben und getestet. Dies wurde als Aufwärmübung durchgeführt, um sich mit ESTK und Illustrator vertraut zu machen. In den nächsten Schritten werden wir an dem eigentlichen Skript arbeiten.
Kehren Sie zu ESTK zurück und löschen Sie den in Schritt 2 erstellten Testcode. Fügen Sie anschließend die folgenden Codezeilen in "test.jsx:" ein.
/ * Um sicherzustellen, dass mindestens ein Dokument in Illustrator verfügbar ist und mindestens ein Objekt in diesem Dokument zur Bearbeitung von * / if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) // To vorhanden ist Stellen Sie sicher, dass der Dokumentfarbmodus CMYK ist, wenn (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); // Aufruf einer tatsächlichen Funktion, die die gesamte Logik enthält else alert ("Dokumentfarbraum ist nicht CMYK. Ändern Sie den Dokumentfarbmodus in CMYK-Modus", "CMYK-Dokument erforderlich"); else alert ("Entweder ist kein Dokument verfügbar oder das Dokument ist leer"); function convertTograd () // Logik zum Konvertieren einer flachen Farbe in einen Farbverlauf
In der obigen Codestruktur erstellen wir einfach eine Voraussetzungsprüfung für unsere logische Hauptfunktion - converToGrad (). Die Hauptlogik sollte nur ausgeführt werden, wenn die folgenden Bedingungen erfüllt sind:
app.documents.length
gibt die Gesamtzahl der in Illustrator geöffneten Dokumente zurück.
Ein activeDocument
Objekt bezieht sich auf das aktuelle (aktive) Dokument, in dem Sie arbeiten.
pathItems
verweist auf eine Sammlung aller pathItem
Objekte in einem Illustrator-Dokument. Jedes grafische Element wie Rechteck, Ellipse, Polygon, Linie, benutzerdefinierte Formen usw. wird als bezeichnet pathItem
; und eine Sammlung von all diesen pathItem
werden als bezeichnet pathItems
. Daher, app.activeDocument.pathItems.length
gibt die Anzahl der grafischen Elemente im aktuellen Dokument zurück.
Das documentColorSpace
Objekt definiert den Farbmodus des Dokuments. Wir nehmen diese Überprüfung vor, da die gesamte Logik in diesem Skript auf dem CMYK-Farbraum basiert.
Die grundlegende Codestruktur ist vollständig festgelegt. Als nächstes werden wir eingehen convertToGrad ()
Funktion.
Die wichtigste Voraussetzung unserer Hauptlogik ist das Abrufen der Gesamtzahl der ausgewählten Elemente. Wenn keine Elemente ausgewählt sind, weist das Skript Sie an, mindestens ein Objekt auszuwählen. Fügen Sie dazu die folgenden Codezeilen hinzu convertToGrad ()
Funktion:
Funktion convertToGrad () var items = Auswahl; var totalSelected = items.length; if (totalSelected> 0) // mit der Hauptlogik fortfahren else alert ("Bitte wählen Sie mindestens ein Objekt aus"); // convertToGrad beenden
var items = Auswahl
erstellt eine neue Variable Artikel
und ordnet ihm die gesamte Auswahl zu. In der nächsten Zeile, Einzelteile.Länge
gibt die Gesamtzahl der ausgewählten Elemente zurück, denen zugewiesen ist totalSelected
.
Um eine flache Farbe in einen Verlauf umzuwandeln, werden wir den Benutzer dazu auffordern, einige Werte für die Verlaufsverschiebung und den Verlaufswinkel einzugeben. Aber vorher wollen wir noch einmal überprüfen, was sie sind.
Farbverlaufsverschiebung: Dies ist ein numerischer Wert, der bestimmt, wie viel Farbe der Originalfarbe hinzugefügt oder aus ihr entfernt wird. Dies ist der Kern unserer Logik bei der Umwandlung einer flachen Farbe in einen Farbverlauf.
Wie funktioniert ein Gradient Shift? Um zu verstehen, wie es funktioniert, betrachten Sie ein einfaches Beispiel eines Objekts, das mit CMYK-Werten gefüllt ist: C = 50, M = 20, Y = 100 und K = 30.
Als Nächstes bitten wir den Benutzer, einen Wert für Gradient Shift einzugeben. Bezeichnen wir diesen Wert mit gShift
, und der Benutzer hat 10 für eingegeben gShift
.
Sobald wir die haben gShift
Wert erstellen wir zwei Farbverlaufsanschläge für unser Objekt. Der erste Stopp, d. H. Der leichtere; werden alle CMYK-Werte um, verringert gShift
. Während der letzte Stopp, d. H. Der dunklere, alle CMYK-Werte erhöht, werden gShift
.
Auf diese Weise wird aus der tatsächlichen Füllfarbe ein Dunkel-Hell-Farbverlauf erzeugt. Wir werden auch einige Validierungen durchführen, um die CMYK-Werte auf 0 und 100 zu beschränken, da a addiert oder subtrahiert wird gShift
value kann die CMYK-Werte über 0 oder 100 hinaus verschieben.
Steigungswinkel: Obwohl dies nicht Teil der Kernlogik ist, werden wir diese Funktion verwenden, um einen gewissen Zugang und die Freiheit zu bieten, einen benutzerdefinierten Winkel für den resultierenden Gradienten auszuwählen. Die Verwendung des Gradientenwinkels wird in der späteren Phase dieses Tutorials erläutert.
Kehren wir zum Code zurück und holen Sie die Benutzerdaten ab.
Um die Benutzerdaten abzurufen, geben Sie die folgenden Codezeilen in ein if (totalSelected> 0)
Block:
if (totalSelected> 0) var gShift = Math.round (Eingabeaufforderung ("Geben Sie einen Wert für die Gradientenverschiebung ein", "10", "Gradient Shift")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = Eingabeaufforderung ("Vektorwinkel für Gradient", "0.0", "Gradient Angle") if (gradAngle == null) gradAngle = 0; // endif
In den obigen Codezeilen fordern wir einen Benutzer auf, einen Wert für die Gradientenverschiebung und den Gradientenwinkel einzugeben. Das Math.round ()
Die Funktion rundet den eingegebenen Wert in eine ganze Zahl. (Hinweis: Sie können überspringen Math.round ()
wenn Sie möchten, dass Dezimalwerte akzeptiert werden.) Die Standardwerte für gShift
und gradAngle
werden auf "10" bzw. "0.0" gesetzt.
Beachten Sie, dass wir auch die eingegebenen Werte für Null und Null überprüfen. Null wird gefunden, wenn ein Benutzer auf die Schaltfläche Abbrechen klickt. Auch schränken wir das ein gShift
Wert innerhalb von 0 und 100.
Sobald wir die haben gShift
und gradAngle
Werte können wir für den Rest des Codes weitermachen.
Gleich nach dem gradAngle
Geben Sie die folgenden Codezeilen ein:
für (var j = 0; j < totalSelected; j++) var currentObject = app.activeDocument.selection[j]; if(currentObject.typename != "CompoundPathItem" && currentObject.typename != "GroupItem") if(currentObject.filled==true && currentObject.fillColor.typename != "GradientColor" && currentObject.fillColor.typename != "PatternColor" && currentObject.fillColor.typename != "SpotColor" &&) currentObject.fillColor.typename != "GrayColor" //perform color conversion here else alert("Fill an object with CMYK color. Any objects containing\ngradients, patterns, spot colors or empty fills will be omitted."," Only CMYK Colors Allowed"); else alert("This script only works with Non-Compound Objects or Isolated Group items.\nAny items with Groups or Compound Objects will be omitted.", "Ungroup or Isolate the Group Items"); //endfor
app.activeDocument.selection [j]
gibt das ausgewählte Objekt für jede Wiederholung von einzeln zurück j
.
Für jedes ausgewählte Objekt führen wir einige Validierungen und Prüfungen durch. Diese Kontrollen sind zu diesem Zeitpunkt von entscheidender Bedeutung. Zunächst wird geprüft, ob es sich bei dem Objekt um ein zusammengesetztes Element oder um ein Gruppenelement handelt. Da dieses Skript nicht direkt auf Gruppen oder zusammengesetzte Objekte angewendet werden kann, ist diese Prüfung obligatorisch.
In der nächsten Ebene prüfen wir, ob das ausgewählte Objekt bereits ein Verlauf, Muster oder eine Schmuckfarbe ist. Wenn ja, werden diese Objekte übersprungen.
Es gibt noch eine Prüfung für die GrayColor-Spezifikation. GrayColor unterscheidet sich geringfügig von den CMYK-Farbspezifikationen.
Für die Behandlung von Objekten mit der grayColor-Spezifikation handelt es sich um eine detaillierte Technik, die ich in dieser Phase des Tutorials nicht einbeziehe. Diese Technik ist jedoch für Ihr Interesse in den Quelldateien enthalten.
Gemäß unserer Logik und unseres Algorithmus wählen wir die Farbe für jedes ausgewählte Objekt aus und teilen seine CMYK-Werte in vier verschiedene Variablen auf (siehe unten):
var currentColor = currentObject.fillColor; var currentCyan = Math.round (currentColor.cyan); var currentMagenta = Math.round (currentColor.magenta); var currentYellow = Math.round (currentColor.yellow); var currentBlack = Math.round (currentColor.black);
Hinweis: Alle diese Codezeilen müssen sich im Block "Farbkonvertierung durchführen" befinden, wie in Schritt 7 gezeigt.
pathItem.fillColor
gibt die Füllfarbe eines bestimmten Pfadelements zurück. In unserem Fall lautet das pathItem currentObject
. Wir benutzen color.cyan
, color.magenta
, Farbe Gelb
und Farbe schwarz
Eigenschaften zum Abrufen der C-, M-, Y- und K-Werte in vier verschiedenen Variablen. Sobald wir diese Werte eingestellt haben, können wir sie leicht mit versetzen gShift
.
Unser resultierender Gradient wird zwei Gradientenanschläge haben. Bezeichnen wir sie mit startColor
und endColor
. Die Variablendeklaration für diese beiden Rampstop-Farben sieht wie folgt aus:
var startColor = new CMYKColor (); var endColor = new CMYKColor ();
Das CMYKColor
ist eine CMYK-Farbspezifikation, die für Farbobjekte verwendet wird. Hier die startColor
und endColor
werden als neue CMYK-Farben deklariert.
Zu diesem Zeitpunkt verfügen wir über alle notwendigen Ressourcen, um einen neuen Gradienten zu erstellen. Wir haben currentColor
(mit separaten CMYK-Werten), startColor
, endColor
und gShift
. Wir können jetzt die endgültigen Farbwerte für festlegen startColor
und endColor
unter Verwendung der Offset-Technik.
Das startColor
wird der hellere Teil des Farbverlaufs sein. Daher werden wir subtrahieren gShift
von C-, M-, Y- und K-Werten von currentColor
, ergebend startColor
.
startColor.cyan = currentCyan - gShift; startColor.magenta = currentMagenta - gShift; startColor.yellow = currentYellow - gShift; startColor.black = currentBlack - gShift;
Dies ist einfach, aber wir müssen einige Prüfungen durchführen. Zum Beispiel, was passiert, wenn die currentCyan
ist schon weniger als gShift
? Sagen, currentCyan
ist 10 und gShift
ist 20. Der resultierende Cyanwert für startColor
wird 10-20 = (-) 10. Um dieses Problem zu lösen, werden wir den obigen Code in die folgenden Codezeilen ändern:
if (currentCyan < gShift) startColor.cyan= 0; else startColor.cyan= currentCyan - gShift; if(currentMagenta < gShift) startColor.magenta= 0; else startColor.magenta = currentMagenta - gShift; if(currentYellow < gShift) startColor.yellow= 0; else startColor.yellow= currentYellow - gShift; if(currentBlack < gShift) startColor.black= 0; else startColor.black = currentBlack - gShift;
Das endColor
wird der dunklere Teil des Farbverlaufs sein. Daher werden wir hinzufügen gShift
zu C, M, Y und K Werten oder currentColor
beziehungsweise. Nach dem einfachen Hinzufügen sollte der Code folgendermaßen aussehen:
endColor.cyan = currentCyan + gShift; endColor.magenta = currentMagenta + gShift; endColor.yellow = currentYellow + gShift; endColor.black = currentBlack + gShift;
Wieder sieht alles gut aus. Es gibt jedoch eine Komplikation: Was passiert, wenn der Zusatz von gShift
ergibt einen Wert größer als 100? Zum Beispiel, currentCyan
ist 95 und gShift
ist 20. Das Addieren dieser beiden ergibt als endColor.cyan = 115
; das ist nicht akzeptabel. Wir werden dies mit einigen Validierungen ausgleichen.
Lassen Sie uns eine neue Variable erstellen gShiftEnd
, das ist gleich 100-g-Schicht
. Als Nächstes prüfen wir, ob der aktuelle C-, M-, Y- oder K-Wert größer als ist gShiftEnd
. Wenn ja, setzen wir den C-, M-, Y- oder K-Wert des endColor auf 100; Andernfalls setzen wir den C-, M-, Y- oder K-Wert von endColor durch Addieren gShift
zu den aktuellen Werten C, M, Y oder K. Dies lässt sich aus dem oben beschriebenen Beispiel ableiten.
Wir haben currentCyan = 95 und gShift = 20. Daher ist gShiftEnd = 100 - 20. d.h. 80. Als nächstes ist currentCyan größer als gShiftEnd; wir werden endColor.cyan auf 100 setzen.
Nach diesem Prinzip wird unser Code folgendermaßen geändert:
gShiftEnd = 100-gShift; if (currentCyan> gShiftEnd) endColor.cyan = 100; else endColor.cyan = currentCyan + gShift; if (currentMagenta> gShiftEnd) endColor.magenta = 100; else endColor.magenta = currentMagenta + gShift; if (currentYellow> gShiftEnd) endColor.yellow = 100; else endColor.yellow = currentYellow + gShift; if (currentBlack> gShiftEnd) endColor.black = 100; else endColor.black = currentBlack + gShift;
Bis zu diesem Punkt sieht der vollständige Code also so aus:
if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); else alert ("Der Dokumentfarbraum ist nicht CMYK. Ändern Sie den Dokumentfarbmodus in den CMYK-Modus", "CMYK-Dokument erforderlich"); // end main if else alert ("Entweder ist kein Dokument verfügbar oder das Dokument ist leer"); Funktion convertToGrad () var items = Auswahl; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (Eingabeaufforderung ("Geben Sie einen Wert für die Gradientenverschiebung ein", "10", "Gradient Shift")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = Eingabeaufforderung ("Vektorwinkel für Gradient", "0.0", "Gradient Angle") if (gradAngle == null) gradAngle = 0; für (var j = 0; j < totalSelected; j++) var currentObject = app.activeDocument.selection[j]; if(currentObject.typename != "CompoundPathItem" && currentObject.typename != "GroupItem") if(currentObject.filled==true && currentObject.fillColor.typename != "GradientColor" && currentObject.fillColor.typename != "PatternColor" && currentObject.fillColor.typename != "SpotColor" && currentObject.fillColor.typename != "GrayColor" ) var currentColor = currentObject.fillColor; var currentCyan = Math.round(currentColor.cyan); var currentMagenta = Math.round(currentColor.magenta); var currentYellow = Math.round(currentColor.yellow); var currentBlack = Math.round(currentColor.black); // Create a color for both ends of the gradient var startColor = new CMYKColor(); var endColor = new CMYKColor(); if(currentCyan < gShift) startColor.cyan = 0; else startColor.cyan = currentCyan - gShift; if(currentMagenta < gShift) startColor.magenta = 0; else startColor.magenta = currentMagenta - gShift; if(currentYellow < gShift) startColor.yellow = 0; else startColor.yellow = currentYellow - gShift; if(currentBlack < gShift) startColor.black= 0; else startColor.black = currentBlack - gShift; gShiftEnd = 100 - gShift; if(currentCyan > gShiftEnd) endColor.cyan = 100; else endColor.cyan = currentCyan + gShift; if (currentMagenta> gShiftEnd) endColor.magenta = 100; else endColor.magenta = currentMagenta + gShift; if (currentYellow> gShiftEnd) endColor.yellow = 100; else endColor.yellow = currentYellow + gShift; if (currentBlack> gShiftEnd) endColor.black = 100; else endColor.black = currentBlack + gShift; // Gradient Declaration Block // endif else alert ("Füllen Sie ein Objekt mit CMYK-Farbe. Alle Objekte, die \ n Gradienten, Muster, Sonderfarben oder leere Füllungen enthalten) werden weggelassen.", "Nur CMYK-Farben zulässig"); else alert ("Dieses Skript funktioniert nur mit nicht zusammengesetzten Objekten oder isolierten Gruppenelementen. \ nAlle Elemente mit Gruppen oder zusammengesetzten Objekten werden weggelassen.", "Gruppieren von Elementen aufheben oder isolieren")); // endfor // Ende ausgewählt else else alert ("Bitte wählen Sie mindestens ein Objekt aus");
Jetzt haben wir das eingestellt startColor
und endColor
; Wir können mit der Erstellung des neuen Farbverlaufs fortfahren.
Fügen Sie zum Hinzufügen eines neuen Farbverlaufs die folgenden Codezeilen in das Feld "// Verlaufsdeklarationsblock".
var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR;
Dadurch wird ein neuer linearer Farbverlauf in das aktuell aktive Dokument eingefügt.
Fügen Sie unmittelbar nach der Gradientendeklaration die folgenden Codezeilen hinzu:
// Ändern Sie den ersten Gradientenanschlag newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Ändere den letzten Gradientenstopp newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor;
gradientStop [0]
ist der erste Gradientenstopp, während, gradientStop [1]
ist die letzte Steigung. Wenn Sie mehr Verlaufsanschläge wünschen, können Sie sie als bezeichnen gradientStop [2], gradientStop [3]
und so weiter.
rampPoint
wird verwendet, um die Rampenpunktposition des zugehörigen Gradientenstops festzulegen. Wir haben den ersten und letzten Anstiegspunkt auf 0 bzw. 100 gesetzt. Mittelpunkt
wird verwendet, um die Position des Mittelpunkts zwischen zwei Gradientenstopps festzulegen. Wir haben dies auf 50 gesetzt. Schließlich haben wir die Werte von zugewiesen startColor
und endColor
auf den ersten und letzten Farbverlauf.
Wir sind fast fertig mit der Farbkonvertierung und der Gradientenbildung. Als Nächstes müssen wir diesen neu erstellten Farbverlauf auf das aktuell ausgewählte Objekt anwenden. Dazu erstellen wir ein Farbverlaufsobjekt, das sich auf den neu erstellten Farbverlauf bezieht.
Hinweis: Wir können den neu erstellten Farbverlauf nicht direkt als Füllfarbe auf das Objekt anwenden. Um diesen Farbverlauf zu verwenden, müssen Sie ein neues Farbverlaufsobjekt erstellen, wie unten gezeigt:
// ein Illustrator.GradientColor-Objekt erstellen, das sich auf den // neu erstellten Verlauf bezieht var varOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient;
Zum Schluss füllen wir die currentObject
mit dem colorOfGradient
, Wie nachfolgend dargestellt:
// Aktuelles Pfadelement abrufen, neuen Verlauf als Füllung anwenden currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);
Wir haben eine Rotationsmatrix auf das aktuelle Objekt angewendet. Diese Rotationsmatrix verwendet den Gradientenwinkel, um den Gradienten zu transformieren. Die Rotationssyntax lautet:
drehen
(Winkel
[, changePositions]
[, changeFillPatterns]
[, changeFillGradients]
[, changeStrokePattern]
[, drehenAbout])
Hier haben wir eingestellt changeFillgradients
auf "wahr" und der Rest auf "falsch". Dies ist eine schwierige Methode, um die Verlaufsfarbe in einem bestimmten Winkel zu drehen. Danke an John Wundes, der mir diese intelligente Technik vorgeschlagen hat.
Das endgültige Skript nach der vollständigen Codierung wird unten gezeigt:
if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); else alert ("Der Dokumentfarbraum ist nicht CMYK. Ändern Sie den Dokumentfarbmodus in den CMYK-Modus", "CMYK-Dokument erforderlich"); // end main if else alert ("Entweder ist kein Dokument verfügbar oder das Dokument ist leer"); Funktion convertToGrad () var items = Auswahl; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (Eingabeaufforderung ("Geben Sie einen Wert für die Gradientenverschiebung ein", "10", "Gradient Shift")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = Eingabeaufforderung ("Vektorwinkel für Gradient", "0.0", "Gradient Angle") if (gradAngle == null) gradAngle = 0; für (var j = 0; j < totalSelected; j++) var currentObject = app.activeDocument.selection[j]; if(currentObject.typename != "CompoundPathItem" && currentObject.typename != "GroupItem") if(currentObject.filled==true && currentObject.fillColor.typename != "GradientColor" && currentObject.fillColor.typename != "PatternColor" && currentObject.fillColor.typename != "SpotColor" && currentObject.fillColor.typename != "GrayColor" ) var currentColor = currentObject.fillColor; var currentCyan = Math.round(currentColor.cyan); var currentMagenta = Math.round(currentColor.magenta); var currentYellow = Math.round(currentColor.yellow); var currentBlack = Math.round(currentColor.black); // Create a color for both ends of the gradient var startColor = new CMYKColor(); var endColor = new CMYKColor(); if(currentCyan < gShift) startColor.cyan= 0; else startColor.cyan = currentCyan - gShift; if(currentMagenta < gShift) startColor.magenta = 0; else startColor.magenta = currentMagenta - gShift; if(currentYellow < gShift) startColor.yellow = 0; else startColor.yellow = currentYellow - gShift; if(currentBlack < gShift) startColor.black = 0; else startColor.black = currentBlack - gShift; gShiftEnd = 100 - gShift; if(currentCyan > gShiftEnd) endColor.cyan = 100; else endColor.cyan = currentCyan + gShift; if (currentMagenta> gShiftEnd) endColor.magenta = 100; else endColor.magenta = currentMagenta + gShift; if (currentYellow> gShiftEnd) endColor.yellow = 100; else endColor.yellow = currentYellow + gShift; if (currentBlack> gShiftEnd) endColor.black = 100; else endColor.black = currentBlack + gShift; // Einen neuen Farbverlauf erstellen // Ein neuer Farbverlauf hat immer zwei Stopps. Var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR; // Ändern Sie den ersten Gradientenanschlag newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Ändere den letzten Gradientenstopp newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor; // ein Illustrator.GradientColor-Objekt erstellen, das sich auf den // neu erstellten Verlauf bezieht var varOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient; // Aktuelles Pfadelement abrufen, neuen Verlauf als Füllung anwenden currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER); // endif else alert ("Füllen Sie ein Objekt mit CMYK-Farbe. Alle O