Scripting Illustrator - Konvertera en platt processfärg till en matchande gradient

Vi är alla ganska bekanta med Adobe Illustrator och dess användargränssnitt. I våra dagliga kreativa uppgifter använder vi många funktioner, till exempel: menyer, paletter, färger, plug-ins och verktyg. Vi använder dessa funktioner i form av ett användargränssnitt. Dessa användargruppfunktioner skickas fram till oss genom olika skript och plugin-program.

På ett enklare sätt kan vi koda skript för att automatisera uppgifter eller få lite effekt i Illustrator. Följ med för att lära dig hur du gör det. I den här handledningen kommer vi att koda i Javascript ett skript som konverterar ett flatt processfyllt objekt till dess matchande gradient.

Vector Plus

Vill du ha tillgång till hela Vector Source-filerna och nedladdningsbara kopior av varje handledning, inklusive den här? Bli med Plus Plus för bara 9 $ per månad.

Handledning detaljer

  • Program: Adobe Illustrator CS3 och ExtendedScript Toolkit
  • Svårighetsgrad: Mellanliggande
  • Beräknad sluttid: 3 till 4 timmar

Scriptets mål

Vi vill att detta skript ska utföra en mycket enkel uppgift. I Adobe Illustrator, när en användare väljer vissa objekt fyllda med en platt CMYK-färg, och exekverar detta Script; objekten ska omvandlas till en matchande CMYK Gradient-fyllning. Utgångsgradienten kommer att likna något som en gradientöverlagseffekt ses i multipliceringsläge. Detta visas i bilden nedan.

Därför syftar vårt skript till att konvertera ett platt CMYK-fyllt objekt till en mörk till ljus anpassningsgradient. Det här är en enkel åtgärd som är en bra övning för att lära sig att skript för Illustrator.

Logik och algoritm

Logiken för att konvertera en platt färg till en mörk till ljusgradient kan förstås i fem enkla steg:

  • Steg 1: Välj färgen på det aktuella objektet. dvs currentColor = färg för det aktuella valda objektet.
  • Steg 2: Skapa en ny gradientfärg med två rampstoppar: startColor och endColor.
  • Steg 3: startColor = currentColor - gShift dvs tänd den ursprungliga färgen.
  • Steg 4: endColor = currentColor + gShift dvs dämpa originalfärgen.
  • Steg 5: Applicera den nya lutningen med startColor och endColor till objektet.

Var, gShift är mängden gradientskift som kommer att anges av användaren. Ovanstående algoritm kan lätt förstås från den i figuren visade bildrepresentationen.

Bortsett från kärnlogiken ska vi genomföra några valideringar och kontroller för att detta skript fungerar korrekt. Dessa valideringar kommer att omfattas av olika steg i denna handledning. Innan vi går fram till själva handledningen, låt oss bli bekanta med några förutsättningar.

Introduktion till Scripting

Denna handledning kräver viss grundläggande kunskaper om skript och dess miljö. För att bli bekant med Illustrators Scripting Environment kan du snabbt titta på dokumentationen som finns i Illustrators installationsmapp, gå till installation_Directory \ Adobe \ Adobe Illustrator CS3 \ Scripting \ Documentation. Här hittar du följande dokument för att komma igång med JavaScript:

  • Adobe Intro till Scripting.pdf
  • Illustrator CS3 Scripting Guide.pdf
  • Illustrator CS3 JavaScript Referens.pdf
  • JavaScript-verktygsguiden CS3.pdf

Typer av skript

Det finns tre typer av skript som vi kan skriva för Illustrator. Dessa är: AppleScript, JavaScript och VBScript. Eftersom JavaScript stöds både på Windows och Mac OS, kodar vi vår logik i JavaScript. Syntaxen och notationerna är mycket lik standard JavaScript. Den enda skillnaden handlar om förlängningen. För Illustrator kommer vi att ange alla JavaScript-filer med en förlängning .JSX istället för det vanliga .js förlängning.

Obligatoriska verktyg

Även om du kan koda hela JavaScript i någon av dina favorit textredigerare, Det är lämpligt att använda Adobe ExtendedScript Toolkit. Genom att använda den här applikationen kan vi köra, felsöka, testa och kontrollera vår kod synkront med Illustrator.

Obs! Under hela handledningen kommer vi att beteckna ExtendedScript Toolkit med en kort form - ESTK.

Steg 1

Öppna Adobe ExtendedScript Toolkit och skapa en ny JavaScript-fil. Välj sedan Adobe Illustrator i rullgardinsmenyn för målprogram. Detta berättar ESTK att vi skriver JavaScript för en viss applikation, dvs Adobe Illustrator.

Steg 2 - Skriv en enkel kodkod

I kodredigeringsområdet lägger du in följande rader av kod:

om (app.documents.length> 0) alert ("Dokument finns tillgängliga"); annars varning ("Inga dokument tillgängliga");

I ovanstående kod kontrollerar vi om det finns några dokument som för närvarande öppnas i Illustrator. Detta görs via

app.documents.length. dvs Toppnivåobjektet i alla Adobe Application DOM är applikationsobjektet. Nästa är dokumentobjektet, vilket ytterligare håller föremål som färger, lager, text, sidor etc. Spara den här filen på hårddisken som "test.jsx."

Steg 2.1 - Utför skriptet

Det finns två sätt att utföra Script:

1. Exekvera från ESTK

Om du vill köra ditt skript via ESTK, tryck på Play-knappen som visas nedan.

Detta startar automatiskt Adobe Illustrator-programmet och genererar varningsmeddelandet. Du kan stoppa eller stoppa körningen genom att trycka på paus eller stoppknappar.

2. Exekvera från Illustrator

För att utföra detta skript från Illustrator, gå till Arkiv> Skript> Annat skript (Command + F12) och leta reda på din nyskapade fil "test.jsx." När du klickar på Öppna, kommer skriptet att köras.

Så vad såg du? Ett varningsmeddelande, "Inga dokument tillgängliga."

Skapa sedan ett par nya dokument i Illustrator och kör det här skriptet igen. Den här gången kommer du att se en varning, "Dokument är tillgängliga."

Fram till den här tiden har vi skrivit och testat ett litet stycke kod. Detta gjordes som en uppvärmningsövning för att bekanta sig med ESTK och Illustrator. I våra nästa steg kommer vi att arbeta på själva skriptet.

Steg 3 - Kodstrukturen

Återgå till ESTK och ta bort testkoden som vi skapade i steg 2. Lägg sedan till följande rader av kod i "test.jsx:"

 / * För att se till att det finns minst ett dokument tillgängligt i Illustrator och minst ett objekt i det dokumentet för att fungera på * / if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) // Till Se till att dokumentfärgsläget är CMYK om (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); // Call to actual funktion som kommer att innehålla all logik else alert ("Document Color Space är inte CMYK. Ändra dokumentfärgsläge till CMYK-läge", "CMYK-dokument krävs");  else alert ("Antingen finns inget dokument tillgängligt eller dokumentet är tomt");  funktion convertTograd () // Logic för att konvertera platt färg till gradient

I ovanstående kodstruktur skapar vi helt enkelt en nödvändig kontroll för vår huvudsakliga logiska funktion - converToGrad (). dvs huvudlogiken ska endast utföras om följande villkor är uppfyllda:

  1. Det finns åtminstone ett dokument med ett objekt, så att vi kan arbeta med det.
  2. Dokumentfärgutrymmet ska vara CMYK, eftersom hela logiken är baserad på CMYK-färger.

Steg 3.1 - Förstå DOM-enheterna

app.documents.length returnerar det totala antalet dokument som öppnats i Illustrator.

En activeDocument objekt avser det aktuella (aktiva) dokumentet där du arbetar.

pathItems avser en samling av alla PATHITEM objekt i ett Illustrator-dokument. Alla grafiska objekt som rektangel, ellips, polygon, linje, anpassade former etc betecknas som PATHITEM; och en samling av alla dessa PATHITEM betecknas som pathItems. Därav, app.activeDocument.pathItems.length kommer att returnera antalet grafiska enheter som finns i det aktuella dokumentet.

De documentColorSpace objekt definierar färgläge för dokumentet. Vi gör denna validering eftersom all logiken i det här skriptet kommer att baseras på CMYK-färgutrymme.

Den grundläggande kodstrukturen är helt klar och klar. Därefter kommer vi att gå in convertToGrad () fungera.

Steg 4 - Börjar med huvudlogiken

Det första och främsta kravet på vår huvudlogik är att hämta det totala antalet utvalda objekt. Om inga objekt väljs ska skriptet meddela dig att du vill välja minst ett objekt. Lägg till följande rader med kod till convertToGrad () fungera:

funktion convertToGrad () var items = selection; var totaltVäljat = items.length; om (totaltVäljat> 0) // fortsätt med huvudlogiken annars alert ("Vänligen välj minst ett objekt");  // end convertToGrad

var items = selection skapar en ny variabel objekt och tilldelar hela valet till det. I nästa rad, items.length returnerar det totala antalet valda objekt som tilldelas totalSelected.

Steg 5 - Hämta användardata

För att konvertera en platt färg till en gradient uppmanar vi användaren att ange några värden för Gradient Shift och Gradient Angle. Men före det, låt oss granska vad de är.

Gradient Shift: Detta är ett numeriskt värde som bestämmer hur mycket färg som ska läggas till eller tas bort från den ursprungliga färgen. Detta är kärnan i vår logik när vi omvandlar en platt färg till en gradient.

Hur fungerar en Gradient Shift? För att förstå hur det fungerar, överväga ett enkelt exempel på ett objekt fyllt med CMYK-värden: C = 50, M = 20, Y = 100 respektive K = 30.

Därefter ber vi användaren att ange ett värde för Gradient Shift. Låt oss ange detta värde med gShift, och användaren har angivit 10 för gShift.

När vi har fått gShift värde kommer vi att skapa två gradientstopp för vårt objekt. Det första stoppet, dvs den lättare kommer att ha alla CMYK-värden minskat med gShift. Medan det sista stoppet, dvs den mörkare, kommer alla CMYK-värden att öka med gShift.

På detta sätt kommer en mörk till lätt gradient att genereras från den faktiska fyllfärgen. Vi kommer också att utföra några valideringar för att begränsa CMYK-värdena inom 0 och 100, eftersom vi lägger till eller subtraherar a gShift värdet kan flytta CMYK-värdena bortom 0 eller 100.

Gradient Angle: Även om det inte är en del av kärnlogiken använder vi den här funktionen för att ge viss tillgänglighet och frihet att välja en anpassad vinkel för den resulterande gradienten. Användningen av lutningsvinkel ses i senare skede av denna handledning.

Låt oss återvända till koden och hämta användardata.

Steg 6

För att hämta användardata, ange följande rader med kod i om (totaltValda> 0) blockera:

om (totalVäljad> 0) var gShift = Math.round (prompt ("Ange ett värde för gradientskift", "10", "Gradient Shift")); om (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vector vinkel för gradient", "0.0", "Gradient Angle") om (gradAngle == null) gradAngle = 0;  // endif

I ovanstående rader av kod uppmanar vi en användare att ange något värde för gradientskift och gradientvinkel. De Math.round () funktionen runda in det angivna värdet till ett heltal. (Obs! Du kan hoppa över Math.round () om du vill ha decimalvärden accepterade.) Standardvärdena för gShift och gradAngle är inställda på "10" respektive "0.0".

Observera att vi också validerar de inmatade värdena för null och noll. Null stöter på när en användare klickar på knappen Avbryt. Vi begränsar också gShift värde inom 0 och 100.

När vi har gShift och gradAngle värden kan vi fortsätta för resten av koden.

Steg 7 - Arbeta på de valda objekten

Strax efter gradAngle deklaration, ange följande rader av kod:

 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] returnerar det valda objektet en-för-en för varje iteration av j.

För varje valt objekt gör vi några valideringar och kontroller. Dessa kontroller är avgörande i detta skede. Den första kontrollen är att avgöra om objektet är ett sammansatt objekt eller en gruppobjekt. Eftersom det här skriptet inte fungerar direkt på grupper eller sammansatta objekt är denna kontroll obligatorisk.

På nästa nivå kontrollerar vi om det valda objektet redan är en lutning, mönster eller punktfärg. Om så är fallet kommer dessa objekt att hoppas över.

Det finns ytterligare en check för grayColor-specifikationen. GrayColor är något annorlunda än CMYK-färgspecifikation.

En detaljerad teknik är inblandad för att behandla objekt med grayColor-specifikation, som jag inte tar med i detta skede av handledningen. Denna teknik ingår emellertid i källfilerna för ditt intresse.

Steg 8 - Välj och dela upp färgen

Enligt vår logik och algoritm kommer vi att välja färgen för varje valt objekt och dela dess CMYK-värden i fyra olika variabler, som visas nedan:

 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);

Obs! Alla dessa kodkoder ska komma in i "Utför färgomvandling" -block, som visas i steg 7.

pathItem.fillColor returnerar fyllningsfärgen på ett visst banobjekt. I vårt fall är pathItem currentObject. Vi använder color.cyan, color.magenta, color.yellow och svart färg egenskaper för att hämta C, M, Y och K-värdena i fyra olika variabler. När vi ställer in dessa värden kan vi enkelt kompensera dem med gShift.

Steg 9 - Förklara färger för Gradient Rampstops

Vår resulterande gradient kommer att ha två gradientstopp. Låt oss beteckna dem med Startcolor och EndColor. Den variabla deklarationen för dessa två rampstoppfärger kommer att vara som visas nedan:

var startColor = ny CMYKColor (); var endColor = ny CMYKColor ();

De CMYKColor är en CMYK-färgspecifikation som används för färgobjekt. Här, den Startcolor och EndColor förklaras som nya CMYK-färger.

Steg 10 - Förskjutning av startColor och endColor

I det här skedet har vi alla nödvändiga resurser för att skapa en ny gradient. Vi har currentColor (med separata CMYK-värden), Startcolor, EndColor och gShift. Vi kan nu ange de slutliga färgvärdena för Startcolor och EndColor använder offset teknik.

Steg 10.1 - Ställa in startColor

De Startcolor kommer att vara den lättare delen av gradienten. Därför kommer vi att subtrahera gShift från C, M, Y och K värden av currentColor, resulterar i Startcolor.

startColor.cyan = currentCyan - gShift; startColor.magenta = currentMagenta - gShift; startColor.yellow = currentYellow - gShift; startColor.black = currentBlack - gShift;

Det här är enkelt, men vi behöver göra några kontroller. Vad händer exempelvis om currentCyan är redan mindre än gShift? Säga, currentCyan är 10 och gShift är 20. Det resulterande cyanvärdet för Startcolor blir 10-20 = (-) 10. För att komma till rätta med denna fråga kommer vi att ändra ovanstående uppsättning kod i följande rader av kod:

 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;

Steg 10.2 - Ställa in endColor

De EndColor kommer att vara den mörkare delen av gradienten. Därför lägger vi till gShift till C, M, Y och K-värden eller currentColor respektive. Efter enkel tillägg ska koden se ut som följer:

 endColor.cyan = currentCyan + gShift; endColor.magenta = currentMagenta + gShift; endColor.yellow = currentYellow + gShift; endColor.black = currentBlack + gShift;

Återigen ser allting okej ut. Men det finns en komplikation: Vad kommer att hända om tillägget av gShift resulterar i ett värde större än 100? Till exempel, currentCyan är 95 och gShift är 20. Att lägga till dessa två kommer att resultera som endColor.cyan = 115; vilket inte är acceptabelt. Så vi kommer att kompensera detta med några valideringar.

Låt oss skapa en ny variabel gShiftEnd, vilket är lika med 100-gShift. Därefter kommer vi att kontrollera om det aktuella C-, M-, Y- eller K-värdet är större än gShiftEnd. Om så är fallet kommer vi att ställa in endColors C, M, Y eller K-värde till 100; annars kommer vi att ange endColors C, M, Y eller K-värde genom att lägga till gShift till den aktuella C, M, Y eller K. Detta kan utarbetas från det exempel vi såg ovan.

Vi har nuvarandeCyan = 95 och gShift = 20. Därför gShiftEnd = 100 - 20. dvs 80. Nästa, nuvarandeCyan är större än gShiftEnd; så vi kommer att ange endColor.cyan till 100.

Efter denna princip kommer vår kod att ändras till följande:

 gShiftEnd = 100-gShift; om (currentCyan> gShiftEnd) endColor.cyan = 100; annars endColor.cyan = currentCyan + gShift; om (currentMagenta> gShiftEnd) endColor.magenta = 100; annars endColor.magenta = currentMagenta + gShift; om (currentYellow> gShiftEnd) endColor.yellow = 100; annars endColor.yellow = currentYellow + gShift; om (currentBlack> gShiftEnd) endColor.black = 100; annars endColor.black = currentBlack + gShift;

Så fram till den här tiden kommer hela koden att se ut så här:

om (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) om (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Document Color Space är inte CMYK. Ändra dokumentfärgsläge till CMYK-läge", "CMYK-dokument krävs");  // avsluta huvud om annars alert ("Ingendera dokumentet är tillgängligt eller dokumentet är tomt");  funktionen convertToGrad () var items = selection; var totaltVäljat = items.length; om (totalVäljad> 0) var gShift = Math.round (prompt ("Ange ett värde för gradientskift", "10", "Gradient Shift")); om (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vector vinkel för gradient", "0.0", "Gradient Angle") om (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; annars endColor.cyan = currentCyan + gShift; om (currentMagenta> gShiftEnd) endColor.magenta = 100; annars endColor.magenta = currentMagenta + gShift; om (currentYellow> gShiftEnd) endColor.yellow = 100; annars endColor.yellow = currentYellow + gShift; om (currentBlack> gShiftEnd) endColor.black = 100; annars endColor.black = currentBlack + gShift; // Gradient Declaration Block // Endif Other alert ("Fyll ett objekt med CMYK-färg. Alla objekt som innehåller \ ngradients, mönster, spotfärger eller tomma fyllningar kommer att utelämnas.", "Endast CMYK Colors Allowed");  else alert ("Detta skript fungerar bara med icke-sammansatta objekt eller isolerade gruppobjekt. \ nAlla objekt med grupper eller sammansatta objekt kommer att utelämnas.", "Ugruppera eller isolera gruppobjekten");  // endfor // end vald annan alert ("Vänligen välj minst ett objekt"); 

Steg 11 - Skapa den nya graden

Nu när vi har satt Startcolor och EndColor; vi kan fortsätta med skapandet av den nya lutningen.

Steg 11.1 - Förklara Gradienten

För att lägga till en ny gradient, sätt in följande rad kod i "// Gradient Declaration Block".

 var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR;

Detta lägger till en ny linjär typ Gradient i det aktuella aktiva dokumentet.

Steg 11.2 - Ställ in egenskaperna för den nya skapade graden

Lägg till följande rader av kod strax efter gradientdeklarationen:

 // Ändra det första gradientstoppet newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Ändra det senaste lutningsstoppet newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor;

gradientStop [0] är det första lutningsstoppet, medan, gradientStop [1] är det sista lutningsstoppet. Om du vill ha mer gradientstopp kan du beteckna dem som gradientStop [2], gradientStop [3] och så vidare.

rampPoint används för att ställa in rampunktspositionen för den associerade gradientStop. Vi har satt den första och sista ramppunkten som 0 respektive 100. mittpunkten används för att ställa in mittpunktens läge mellan två lutningsstopp. Vi har satt detta till 50. Slutligen har vi tilldelat värdena på Startcolor och EndColor till respektive första och sista gradientStops.

Steg 12 - Skapa ett Gradient Color Object

Vi är nästan färdiga med färgomvandling och gradientbildning. Därefter måste vi tillämpa den här nyinställda lutningen till det aktuella valda objektet. För att göra det kommer vi att skapa ett Gradient Color Object som hänvisar till den nyskapade gradienten.

Obs: Vi kan inte tillämpa den nyskapade gradienten direkt som en fyllning Färg till objektet. För att kunna använda denna gradient måste vi skapa ett nytt Gradient Color-objekt, som visas nedan:

 // konstruera ett Illustrator.GradientColor-objekt som hänvisar till // nyskapade gradienten var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient;

Steg 13 - Applicera Gradienten

Slutligen fyller vi currentObject med colorOfGradient, enligt nedanstående:

 // Hämta nuvarande sökvägsartikel, använd ny gradient som fyller currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);

Vi har applicerat en rotationsmatris till det aktuella objektet. Denna rotationsmatris utnyttjar lutningsvinkeln för att transformera lutningen. Rotationssyntaxen är:


rotera
(vinkel
[, ChangePositions]
[, ChangeFillPatterns]
[, ChangeFillGradients]
[, ChangeStrokePattern]
[, RotateAbout])

Här har vi satt changeFillgradients till "sant" och resten till "falskt". Detta är ett knepigt sätt att rotera gradientfärgen i en viss vinkel. Tack till John Wundes för att föreslå mig denna intelligenta teknik.

Steg 14 - Slutskriptet

Slutskriptet efter fullständig kodning visas nedan:

 om (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) om (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Document Color Space är inte CMYK. Ändra dokumentfärgsläge till CMYK-läge", "CMYK-dokument krävs");  // avsluta huvud om annars alert ("Ingendera dokumentet är tillgängligt eller dokumentet är tomt");  funktionen convertToGrad () var items = selection; var totaltVäljat = items.length; om (totalVäljad> 0) var gShift = Math.round (prompt ("Ange ett värde för gradientskift", "10", "Gradient Shift")); om (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vector vinkel för gradient", "0.0", "Gradient Angle") om (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; annars endColor.cyan = currentCyan + gShift; om (currentMagenta> gShiftEnd) endColor.magenta = 100; annars endColor.magenta = currentMagenta + gShift; om (currentYellow> gShiftEnd) endColor.yellow = 100; annars endColor.yellow = currentYellow + gShift; om (currentBlack> gShiftEnd) endColor.black = 100; annars endColor.black = currentBlack + gShift; // Skapa en ny gradient // En ny gradient har alltid 2 stopp var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR; // Ändra det första gradientstoppet newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Ändra det senaste lutningsstoppet newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor; // konstruera ett Illustrator.GradientColor-objekt som hänvisar till // nyskapade gradienten var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient; // Hämta nuvarande sökvägsartikel, använd ny gradient som fyller currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);  // endif else alert ("Fyll ett objekt med CMYK-färg. Alla objekt som innehåller \ ngradients, mönster, spotfärger eller tomma fyllningar kommer att utelämnas.", "Endast CMYK Colors Allowed");  else alert ("Detta skript fungerar bara med icke-sammansatta objekt eller isolerade gruppobjekt. \ nAlla objekt med grupper eller sammansatta objekt kommer att utelämnas.", "Ugruppera eller isolera gruppobjekten");  // endfor // end vald annan alert ("Vänligen välj minst ett objekt"); 

Steg 15 - Utför skriptet

Spara skriptet och skapa ett nytt dokument i Adobe Illustrator. Skapa sedan några objekt med platta CMYK-färger. Välj några av dessa objekt och kör skriptet genom att följa metoderna som beskrivs i steg 2.1.

Du kommer att uppmanas att ange Gradient Shift. Ange något värde för gShift.

Därefter kommer du att bli uppmanad till lutningsvinkel. Ange ett värde för gradAngle.

Slutligen ser du produktionen som visas nedan.

Slutsats och omfattning

Vi har lärt oss hur man skriver skript för att automatisera eller generera en effekt. Exemplet som visas i denna handledning var en enkel demonstration av vad vi kan utföra genom skript. Med det här exemplet har vi lärt oss hur CMYK-färger representeras i skript, hur de fungerar och hur föremål beter sig i DOM i Adobe Illustrator. I vår nästa del kommer vi att täcka en Script som smälter den tillgängliga gradientfärgen till en platt CMYK-färg. Hoppas att du åtnjuter denna inledande handledning till skript.

Prenumerera på Vectortuts + RSS-flödet för att hålla dig uppdaterad med de senaste vektorhandledningarna och artiklarna.