Scripting Illustrator Teil 2 - So geben Sie einen Farbverlauf in eine flache Prozessfarbe an

In Teil 1 dieser zweiteiligen Übungsreihe haben wir gelernt, wie man ein Skript codiert, das eine flache Prozessfarbe in ihren entsprechenden Farbverlauf umwandelt. In diesem Lernprogramm lernen Sie, ein Skript zu codieren, das eine Verlaufsfüllung in eine flache Prozessfarbe konvertiert. Wir werden die verfügbaren Farbverläufe zu einer flachen Prozessfarbe verschmelzen, die eine Mischung aus allen Farben darstellt, die in diesem Farbverlauf verfügbar sind.

Die gesamte Aufgabe wird über ein JavaScript-Skript für Illustrator ausgeführt. Das Lernprogramm setzt voraus, dass Sie mit den Grundlagen des Skripts vertraut sind. Für diejenigen, die direkt in diesem Tutorial gelandet sind, haben wir ein wenig Know-how über Illustrator Javascripts in Teil 1 dieser Serie. Also, ohne weitere Verzögerungen, lasst uns anfangen!

Vektor Plus

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.

Tutorial-Details

  • Programm: Adobe Illustrator und ExtendedScript Toolkit
  • Version: CS3
  • Schwierigkeit: Mittelstufe
  • Geschätzte Fertigstellungszeit: 3 bis 4 Stunden

Zweck des Skripts

Wir möchten, dass dieses Skript eine sehr einfache Aufgabe ausführt. Wenn ein Benutzer in Adobe Illustrator Objekte auswählt, die mit einer CMYK-Verlaufsfarbe gefüllt sind, und dieses Skript ausführt; Die Objekte werden in eine Flat CMYK-Füllung umgewandelt. Diese flache Füllung ist die Mischung aller Farben, die im vorherigen Farbverlauf verfügbar sind. Zur Verdeutlichung siehe das Bild unten.

Daher ist es das Ziel unseres Skripts, eine Farbverlauf-CMYK-Füllung in eine flache CMYK-Füllung umzuwandeln.

Logik und Algorithmus

Die Logik zum Verschmelzen der Farben eines Farbverlaufs zu einer einzigen Farbe ist einfach und unkompliziert. Wir wählen alle Farben aus dem Farbverlauf aus, ermitteln ihren Durchschnitt und weisen ihn dem Objekt als neue Farbe zu. Wir können dies in fünf Schritten verstehen, wie unten gezeigt:

  • Schritt 1: Wählen Sie die Farbe des aktuellen Objekts. also currentColor = Farbe des aktuell ausgewählten Objekts.
  • Schritt 2: Zählen Sie die Anzahl der Verlaufsanschläge in der aktuellen Farbe.
  • Schritt 3: Wählen Sie bei jedem Farbverlauf die zugehörige Farbe und die CMYK-Werte aus.
  • Schritt 4: Berechnen Sie den durchschnittlichen CMYK-Wert für alle Farben, die an verschiedenen Haltestellen verfügbar sind.
  • Schritt 5:
    Weisen Sie diesen durchschnittlichen CMYK-Wert dem Objekt als neue Farbe zu.

Der obige Algorithmus kann leicht aus der folgenden bildlichen Darstellung verstanden werden.

Wir haben einen kurzen Überblick über die Logik gesehen. Beginnen wir mit der Codierung.

Schritt 1 - Beginnen Sie mit der Codestruktur

Öffnen Sie das ExtendedScript Toolkit und erstellen Sie eine neue Javascript-Datei (Befehl + N). Wählen Sie anschließend Adobe Illustrator als Zielanwendung aus.

Fügen Sie im Code-Bearbeitungsbereich die folgende Codestruktur für bestimmte Validierungen und Überprüfungen der Voraussetzungen hinzu.

 if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToFlat ();  else alert ("Konvertieren Sie die Objekte zuerst in CMYK", "CMYK-Konvertierung erforderlich");  // end main if else alert ("Entweder ist kein Dokument verfügbar oder das Dokument ist leer"); 

Wir prüfen, ob mindestens ein Dokument mit mindestens einem Objekt vorhanden ist, damit wir daran arbeiten können. Als Nächstes prüfen wir, ob der Dokumentfarbmodus CMYK ist oder nicht. Dies ist ein wesentlicher Schritt, da die gesamte Logik für die Farbkonvertierung in diesem Skript auf CMYK-Farben basiert. convertToFlat () ist die Hauptfunktion, die die gesamte Logik enthält. Als nächstes speichern Sie diese Datei als test.jsx.

Schritt 2

Beginnen wir nun mit der Hauptfunktion - convertToFlat (). Wir prüfen, ob ein Element ausgewählt ist oder nicht, da dieses Skript nur für die ausgewählten Objekte funktioniert. Fügen Sie daher die folgenden Codezeilen zu "test.jsx" hinzu.

 Funktion convertToFlat () 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

Schritt 3

Als nächstes beginnen wir eine Schleife innerhalb der "if (totalSelected> 0)"block. Diese Schleife enthält die Farbkonvertierungslogik, die für jedes ausgewählte Element wiederholt wird. Aber kurz vor der Farbkonvertierungslogik wollen wir noch einige Validierungen und Überprüfungen innerhalb dieser Schleife hinzufügen.

 if (totalSelected> 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 != "CMYKColor" && currentObject.fillColor.typename != "PatternColor" && currentObject.fillColor.typename != "SpotColor")  // Color conversion Block  //endif else  alert("Fill an object with CMYK or Grayscale Gradient. Flat Colors, Patterns, Spot Colors and Empty Fills are not allowed."," Only Gradients Allowed");   //endif 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 // endif

Für jedes ausgewählte Element prüfen wir, ob es sich um einen zusammengesetzten Pfad oder ein Gruppenelement handelt. In diesem Fall darf das Skript nicht mehr ausgeführt werden und eine Warnmeldung zurückgeben. Außerdem prüfen wir, ob der Fülltyp des ausgewählten Elements nicht der Verlaufsfüllung entspricht. wenn es sich um eine Schmuckfarbe, eine flache CMYK-Farbe oder ein Muster handelt; das Skript soll eine Warnung zurückgeben. Diese Prüfungen werden ausgeführt, da unser Skript nur für nicht zusammengesetzte Pfadelemente mit Farbverlauf gefüllt ist.
Als Nächstes werden wir den Farbkonvertierungsblock ändern.

Schritt 4

In diesem Stadium müssen wir einzelne C-, M-, Y- und K-Werte für die Farben extrahieren, die sich an verschiedenen Gradientenstopps befinden. Dazu erstellen wir einige Variablen, die individuelle CMYK-Werte enthalten. Fügen Sie also die folgenden Variablendeklarationen direkt im Color-Konvertierungsblock hinzu:

 var currentColor = currentObject.fillColor; var numOfStops = currentColor.gradient.gradientStops.length; var colorBox = []; var cyanBox = []; var magentaBox = []; var yellowBox = []; var blackBox = []; var grayBox = []; var cyanTotal = 0; var magentaTotal = 0; var yellowTotal = 0; var blackTotal = 0; var grayTotal = 0;

Wir werden die Rolle jeder Variablen einzeln sehen:

  • currentColor speichert die Füllfarbe (Farbverlauf) des aktuell ausgewählten Objekts.
  • numOfStops enthält die Gesamtzahl der für das aktuell ausgewählte Objekt verfügbaren Gradientenanschläge. Dies wird verwendet, um den Durchschnitt der Farbwerte in späteren Stufen zu ermitteln.
  • colorBox ist ein Array, das den Füllfarbenwert für alle Gradientenstopps enthält. wenn numOfStops ist vier.
  • colorBox Array enthält vier Farben.
  • CyanBox ist ein Array, das Cyan-Werte für jede Farbe auf verschiedenen Gradientenstopps enthält.
  • Ähnlich, magentaBox, yellowBox und
    schwarze Box halten Sie ihre jeweiligen Farbwerte für jede Farbe auf verschiedenen Gradienten.
  • grayBox ist ein Array, das Grauwerte für die Farbe bei jedem Verlaufsanschlag enthält. Dies ist wichtig, da die graue Farbe eine andere Spezifikation als die CMYK-Farbspezifikation ist. Wenn ein Objekt einen grauen Farbverlauf enthält, behandeln wir die Situation separat, indem Sie diese Variable verwenden.
  • Endlich haben wir cyanTotal, magentaTotal, yellowTotal, blackTotal und grayTotal. Diese Variablen enthalten die Summe aller Werte für Cyan, Magenta, Gelb, Schwarz bzw. Grau.

Schritt 5

Wir haben die Validierungen und Prüfungen durchgeführt. Wir haben auch die notwendigen Container für Farbwerte erstellt. Als Nächstes führen wir eine Schleife aus, in der jeder Gradient nacheinander gelesen wird. Erstellen Sie dazu eine Schleife, wie unten gezeigt:

 für (var k = 0; k < numOfStops; k++)  colorBox[k] = currentColor.gradient.gradientStops[k].color; if(colorBox[k].typename == "GrayColor")  // Extract Gray Color values  else  // Extract CMYK Color values  //end for k

currentColor.gradient.gradientStops [k] .color gibt die Farbe eines bestimmten Farbverlaufs für jede Iteration von k zurück.

Für jeden Gradientenstopp überprüfen wir, ob die verfügbare Farbe a ist Graue Farbe Spezifikation oder a CMYKColor Spezifikation. Abhängig davon implementieren wir unsere Logik.

Schritt 6 - Zusammenfassung der GrayColor-Werte

In der "wenn blockieren" zum Graue Farbe Spezifikation, fügen Sie die folgenden Codezeilen hinzu:

 grayBox [k] = Math.round (colorBox [k] .gray); grayTotal = grayTotal + grayBox [k];

Daher, grayBox [k] enthält alle Grauwerte für jede Farbe an ihren jeweiligen Farbverlaufsstopps.
Nächster, grayTotal wird die Summe dieser Grauwerte sein, die später verwendet wird.

Schritt 7 - Summation der CMYK-Farbwerte

In der "sonst blockieren" zum CMYKColor Spezifikation, fügen Sie die folgenden Codezeilen hinzu:

 cyanBox [k] = Math.round (colorBox [k] .cyan); magentaBox [k] = Math.round (colorBox [k] .magenta); yellowBox [k] = Math.round (colorBox [k] .yellow); blackBox [k] = Math.round (colorBox [k] .black); cyanTotal = cyanTotal + cyanBox [k]; magentaTotal = magentaTotal + magentaBox [k]; yellowTotal = yellowTotal + yellowBox [k]; blackTotal = blackTotal + blackBox [k];

Um zu verstehen, was hier ausgeführt wird, nehmen wir ein Beispiel für die Farbe Cyan. cyanBox [k] speichert die Cyan-Werte für alle Farben, die sich an verschiedenen Gradienten befinden. Nächster, cyanTotal ist die Summe aller dieser Cyan-Werte, die in gespeichert werden cyanBox [k].

Ein ähnlicher Vorgang wird auch für Magenta, Gelb und Schwarz ausgeführt. Sobald die Summation abgeschlossen ist, können wir aus der Schleife herauskommen und den Mittelwert vorfahren.

Schritt 8 - Mittelwertbildung der Farbwerte

Wir haben die Einzelsumme von zusammengetragen graue Farbe und CMYKColor für alle Steigungen. Jetzt müssen wir sie mitteln. Schließen Sie dazu das "für k Schleife"und geben Sie die folgenden Codezeilen unmittelbar nach dem abschließenden Armband von"für k Schleife", Wie nachfolgend dargestellt:

  // Ende für k loop var finalBlack = blackTotal + grayTotal; var newCyan = Math.round (cyanTotal / numOfStops); var newMagenta = Math.round (magentaTotal / numOfStops); var newYellow = Math.round (yellowTotal / numOfStops); var newBlack = Math.round (finalBlack / numOfStops);

In den obigen Codezeilen teilen wir einzelne Summierungen von C, M, Y und K durch numOfStops. Wenn es fünf Gradientenstopps gab, werden wir die Summation der einzelnen C-, M-, Y- und K-Werte durch fünf teilen. Dabei werden durchschnittlich fünf Werte zurückgegeben. Diese gemittelten Werte werden als gespeichert newCyan, newMagenta, newYellow und newBlack beziehungsweise.

Beachten Sie hier den schwierigen Fall von Grau und Schwarz. Die Summation von K ist nicht gerade blackTotal. Es ist eher eine Summe von grayTotal und blackTotal.

Warum haben wir das getan?? Es gibt Fälle, in denen eine Farbverlaufsfüllung sowohl GrayColor-Stopps als auch CMYK-Stopps enthalten kann. In diesem Fall werden die grauen Farbwerte zum K-Wert der CMYK-Farbe addiert. Cyan, Magenta oder Gelb kann kein Grau hinzugefügt werden. Es wird nur in die Kategorie von K fallen.

Nun haben wir alle neuen Durchschnittswerte für C, M, Y und K in der Hand. Im nächsten Schritt implementieren wir diese Werte als neue CMYK-Farbe für das aktuelle Objekt.

Schritt 9 - Die neue Farbe implementieren

Um die neue Farbe zu implementieren, erstellen wir eine neue CMYKColor Objektieren und ändern Sie seine C-, M-, Y- und K-Werte in die Werte, die wir gerade in Schritt 7 berechnet haben. Fügen Sie dazu die folgenden Codezeilen hinzu:

 var newColor = new CMYKColor (); newColor.cyan = newCyan; newColor.magenta = newMagenta; newColor.yellow = newYellow; newColor.black = newBlack; currentObject.fillColor = newColor;

Wir haben eine erstellt neue Farbe Objekt und zugewiesen die Werte von newCyan, newMagenta, newYellow und newBlack als seine C-, M-, Y- bzw. K-Werte.

Als nächstes haben wir die zugewiesen neue Farbe Als ein Füllfarbe zum aktuellen Objekt. Daher wird unser endgültiger Code jetzt wie folgt aussehen:

 if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToFlat ();  else alert ("Konvertieren Sie die Objekte zuerst in CMYK", "CMYK-Konvertierung erforderlich");  // end main if else alert ("Entweder ist kein Dokument verfügbar oder das Dokument ist leer");  Funktion convertToFlat () var items = Auswahl; var totalSelected = items.length; if (totalSelected> 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 != "CMYKColor" && currentObject.fillColor.typename != "PatternColor" && currentObject.fillColor.typename != "SpotColor")  var currentColor = currentObject.fillColor; var numOfStops = currentColor.gradient.gradientStops.length; var colorBox=[]; var cyanBox=[]; var magentaBox=[]; var yellowBox=[]; var blackBox=[]; var grayBox =[]; var cyanTotal = 0; var magentaTotal = 0; var yellowTotal = 0; var blackTotal = 0; var grayTotal = 0; for(var k=0; k < numOfStops; k++)  colorBox[k] = currentColor.gradient.gradientStops[k].color; if(colorBox[k].typename == "GrayColor")  grayBox[k] = Math.round(colorBox[k].gray); grayTotal = grayTotal + grayBox[k];  else  cyanBox[k] = Math.round(colorBox[k].cyan); magentaBox[k] = Math.round(colorBox[k].magenta); yellowBox[k] = Math.round(colorBox[k].yellow); blackBox[k] = Math.round(colorBox[k].black); cyanTotal = cyanTotal + cyanBox[k]; magentaTotal = magentaTotal + magentaBox[k]; yellowTotal = yellowTotal + yellowBox[k]; blackTotal = blackTotal + blackBox[k];  //end for k var finalBlack = blackTotal + grayTotal; var newCyan = Math.round(cyanTotal / numOfStops); var newMagenta = Math.round(magentaTotal / numOfStops); var newYellow = Math.round(yellowTotal / numOfStops); var newBlack = Math.round(finalBlack / numOfStops); var newColor = new CMYKColor(); newColor.cyan = newCyan; newColor.magenta = newMagenta; newColor.yellow = newYellow; newColor.black = newBlack; currentObject.fillColor = newColor;  //endif else  alert("Fill an object with CMYK or Grayscale Gradient. Flat Colors, Patterns, Spot Colors and Empty Fills are not allowed."," Only Gradients Allowed");  // endif 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");  //end for j // endif else  alert("Please select atleast one object");  //endFunction

Schritt 10 - Skript ausführen

Speichern Sie dieses Skript als "test.jsx" und öffnen Sie Adobe Illustrator. Als Nächstes erstellen Sie einige Objekte mit farbigen Verlaufsfüllungen. Um dieses Skript zu testen, wählen Sie einige Objekte aus und gehen Sie zu Datei> Skripts> Anderes Skript (Befehl + F12), und suchen Sie dieses Skript.

Nach der erfolgreichen Ausführung des Skripts sollten Sie eine Verschmelzung der Farbverläufe sehen. etwas Ähnliches:

Fazit und Geltungsbereich

In diesem Tutorial haben wir gesehen, wie Sie einen Verlauf mit Hilfe von Skripten zu einer flachen Farbfüllung füllen. Dieses Skript kann nützlich sein, wenn Sie den Durchschnitt von zwei oder mehr Farben ermitteln müssen. Die Frucht dieses Tutorials besteht jedoch darin, die Grundlagen der Skriptsprache und ihrer Implementierung mit Illustrator zu verstehen.

Es gibt ein breites Spektrum an Vektor-Kreativität und Innovation durch Scripting. Ich hoffe, dass diese zweiteilige Tutorialserie Leser und Autoren dazu inspirieren wird, das Wesentliche des Skripts zu fördern. Vielen Dank für Ihre wertvolle Zeit beim Lesen dieses Tutorials.

Abonnieren Sie den Vectortuts + RSS-Feed, um mit den neuesten Vektor-Tutorials und Artikeln auf dem Laufenden zu bleiben.