Scripting Illustrator - Konverter en flat prosessfarge til en tilsvarende gradient

Vi er alle kjent med Adobe Illustrator og brukergrensesnittet. I våre daglige kreative oppgaver bruker vi mange funksjoner, for eksempel: meny, paller, farger, plug-ins og verktøy. Vi bruker disse funksjonene i form av et brukergrensesnitt. Disse brukergrensesnittfunksjonene blir hentet frem til oss gjennom ulike skript og plugin-moduler.

På en enklere måte kan vi kode skript for å automatisere oppgaver eller få litt effekt i Illustrator. Følg med for å lære hvordan du gjør det. I denne opplæringen vil vi kode i Javascript et skript som vil konvertere et flatt prosessfylt objekt til den tilsvarende gradienten.

Vector Plus

Ønsker du tilgang til hele Vector Source-filene og nedlastbare kopier av hver opplæring, inkludert denne? Bli med Vector Plus for bare 9 $ i måneden.

Opplæringsdetaljer

  • Program: Adobe Illustrator CS3 og ExtendedScript Toolkit
  • Vanskelighetsgrad: Mellomliggende
  • Anslått sluttid: 3 til 4 timer

Scriptets mål

Vi vil at dette skriptet skal utføre en veldig enkel oppgave. I Adobe Illustrator, når en bruker velger noen objekter fylt med et flat CMYK-farge, og utfører dette skriptet; objektene skal konverteres til en matchende CMYK-gradientfylling. Utgangshastigheten vil være noe lik en gradientoverleggseffekt sett i multiplikasjonsmodus. Dette er vist i bildet nedenfor.

Derfor er målet med skriptet vårt å konvertere et flatt CMYK-fyllt objekt til en mørk-til-lys-samsvarende gradient. Dette er en enkel handling som er en god øvelse for å lære å skript for Illustrator.

Logikk og algoritme

Logikken for å konvertere en flat farge til en mørk-til-lys gradient kan forstås i fem enkle trinn:

  • Trinn 1: Velg fargen på det nåværende objektet. dvs. currentColor = farge på det valgte objektet.
  • Steg 2: Lag en ny gradientfarge med to rampestops: startColor og endColor.
  • Trinn 3: startColor = currentColor - gShift dvs. lys opp den opprinnelige fargen.
  • Trinn 4: endColor = currentColor + gShift, dvs. mørk den opprinnelige fargen.
  • Trinn 5: Bruk den nye gradienten med startColor og endColor til objektet.

Hvor, gShift er mengden gradientforskyvning som vil bli oppgitt av brukeren. Ovennevnte algoritme kan lett forstås fra bildetillatelsen vist nedenfor.

Bortsett fra kjernelogikken, vil vi implementere noen valideringer og sjekker at dette skriptet fungerer riktig. Disse valideringene vil bli dekket på ulike stadier av denne opplæringen. Før vi går til selve opplæringen, la oss bli kjent med noen forutsetninger.

Introduksjon til Scripting

Denne opplæringen krever litt grunnleggende kunnskap om skripting og dets miljø. For å bli kjent med Illustrators Scripting Environment, kan du raskt se på dokumentasjonen som er tilgjengelig i Illustrators installasjonsmappe, gå til installation_Directory \ Adobe \ Adobe Illustrator CS3 \ Scripting \ Documentation. Her finner du følgende dokumenter for å komme i gang med JavaScript:

  • Adobe Intro til Scripting.pdf
  • Illustrator CS3 Scripting Guide.pdf
  • Illustrator CS3 JavaScript Reference.pdf
  • JavaScript Tools Guide CS3.pdf

Typer av skript

Det finnes tre typer skript vi kan skrive for Illustrator. Disse er: AppleScript, JavaScript og VBScript. Siden JavaScript støttes på både Windows og Mac OS, vil vi kode vår logikk i JavaScript. Syntaxen og notasjonene er svært lik standard JavaScript. Den eneste forskjellen handler om utvidelsen. For Illustrator vil vi betegne alle JavaScript-filene med en utvidelse .jsx i stedet for felles .js forlengelse.

Nødvendige verktøy

Selv om du kan kode hele JavaScript i noen av dine favoritt tekstredigeringsprogrammer; det er tilrådelig å bruke Adobe ExtendedScript Toolkit. Ved å bruke dette programmet kan vi kjøre, feilsøke, teste og sjekke vår kode synkront med Illustrator.

Merk: Gjennom denne opplæringen vil vi betegne ExtendedScript Toolkit med en kort form - ESTK.

Trinn 1

Åpne Adobe ExtendedScript Toolkit og opprett en ny JavaScript-fil. Deretter velger du Adobe Illustrator fra rullegardinlisten for målprogram. Dette forteller ESTK at vi skriver JavaScript for et bestemt program, det vil si Adobe Illustrator.

Trinn 2 - Skriv en enkel kodebit

I kodedigeringsområdet legger du inn følgende kodelinjer:

hvis (app.documents.length> 0) varsling ("Dokumenter er tilgjengelige"); ellers varslet ("Ingen tilgjengelige dokumenter");

I koden ovenfor kontrollerer vi om det er noen dokumenter som for øyeblikket er åpnet i Illustrator. Dette gjøres via

app.documents.length. dvs. Toppnivåobjektet i en hvilken som helst Adobe Application DOM er applikasjonsobjektet. Neste er dokumentobjektet, som videre holder objekter som farger, lag, tekst, sider etc. Lagre denne filen på harddisken din som "test.jsx."

Trinn 2.1 - Utfør skriptet

Det er to måter å utføre scriptet på:

1. Utfør fra ESTK

Hvis du ønsker å kjøre skriptet ditt via ESTK, trykker du på Play-knappen som vist nedenfor.

Dette vil automatisk starte Adobe Illustrator-programmet og generere varselmeldingen. Du kan stoppe eller stoppe utførelsen ved å trykke på pause eller stoppknappene.

2. Utfør fra Illustrator

For å utføre dette skriptet fra Illustrator, gå til File> Scripts> Other Script (Command + F12) og finn den nyopprettede filen "test.jsx." Når du klikker på Åpne, blir skriptet kjørt ut.

Så hva så du? En varselmelding, "Ingen dokumenter tilgjengelige."

Deretter lager du et par nye dokumenter i Illustrator og kjører dette skriptet igjen. Denne gangen vil du se et varsel, "Dokumenter er tilgjengelige."

Inntil dette punktet har vi skrevet og testet et lite stykke kode. Dette ble gjort som en oppvarmingstrening for å bli kjent med ESTK og Illustrator. I de neste trinnene skal vi jobbe med selve skriptet.

Trinn 3 - Kodestrukturen

Gå tilbake til ESTK og slett testkode som vi opprettet i trinn 2. Deretter legger du til følgende linjer med kode i "test.jsx:"

 / * For å være sikker på at det er minst ett dokument tilgjengelig i Illustrator og minst en gjenstand i det dokumentet som skal fungere på * / hvis (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) // To Kontroller at dokumentfargemodus er CMYK hvis (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); // Call til faktisk funksjon som vil inneholde all logikken else alert ("Document Color Space er ikke CMYK. Endre dokumentfargemodus til CMYK Mode", "CMYK Document Required");  else alert ("Ingen av dokumentene er tilgjengelige eller dokumentet er tomt");  funksjon convertTograd () // Logic for å konvertere flat farge til gradient

I den ovennevnte kodestrukturen lager vi ganske enkelt en forutgående kontroll for vår viktigste logiske funksjon - converToGrad (). dvs. Hovedlogikken bør bare utføres dersom følgende betingelser er oppfylt:

  1. Minst ett dokument med en gjenstand eksisterer, slik at vi kan jobbe med det.
  2. Dokumentfargene bør være CMYK, fordi hele logikken er basert på CMYK-farger.

Trinn 3.1 - Forstå DOM Entities

app.documents.length returnerer totalt antall dokumenter åpnet i Illustrator.

en activeDocument objekt refererer til det nåværende (aktive) dokumentet du arbeider med.

pathItems refererer til en samling av alle pathItem objekter i et Illustrator-dokument. Enhver grafisk gjenstand som rektangel, ellipse, polygon, linje, egendefinerte former etc betegnes som pathItem; og en samling av alle disse pathItem er betegnet som pathItems. derav, app.activeDocument.pathItems.length vil returnere antall grafiske enheter som finnes i det nåværende dokumentet.

De documentColorSpace objekt definerer fargemodus for dokumentet. Vi gjør denne valideringen fordi all logikken i dette skriptet vil være basert på CMYK-fargeplass.

Den grunnleggende kodestrukturen er alt satt og ferdig. Deretter skal vi inngå convertToGrad () funksjon.

Trinn 4 - Begynn med hovedlogikken

Det første og fremste kravet til vår hovedlogikk er å hente det totale antall valgte elementer. Hvis ingen elementer er valgt, skal skriptet varsle deg om å velge minst en gjenstand. For dette legger du til følgende kodelinjer i convertToGrad () funksjon:

funksjon convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) // fortsett med hovedlogikken annet alert ("Vennligst velg minst ett objekt");  // end convertToGrad

var elementer = utvalg lager en ny variabel elementer og tildeler hele utvalget til det. I neste linje, items.length returnerer totalt antall valgte elementer, som er tildelt totalSelected.

Trinn 5 - Få brukerdata

For å konvertere en flat farge til en gradient, vil vi be brukeren om å legge inn noen verdier for Gradient Shift og Gradient Angle. Men før det, la oss se på hva de er.

Gradient Shift: Dette er en numerisk verdi som bestemmer hvor mye farge vil bli lagt til eller fjernet fra den opprinnelige fargen. Dette er kjernen i vår logikk ved å konvertere en flat farge til en gradient.

Hvordan fungerer en Gradient Shift? For å forstå hvordan det fungerer, bør du vurdere et enkelt eksempel på et objekt fylt med CMYK-verdier: C = 50, M = 20, Y = 100 og K = 30.

Deretter ber vi brukeren å angi en verdi for Gradient Shift. La oss angi denne verdien av gShift, og brukeren har oppgitt 10 for gShift.

Når vi har fått gShift verdi, vil vi opprette to gradientstopp for objektet vårt. Den første stopp, dvs. den lettere vil ha alle CMYK verdiene redusert av gShift. Mens den siste stopp, dvs. den mørkere, vil ha alle CMYK-verdiene økt med gShift.

På denne måten genereres en mørk til lett gradient fra den faktiske fyllfargen. Vi vil også utføre noen valideringer for å begrense CMYK-verdiene innen 0 og 100, fordi du legger til eller trekker bort en gShift verdien kan flytte CMYK-verdiene utover 0 eller 100.

Gradient Angle: Selv om det ikke er en del av kjernelogikken, vil vi bruke denne funksjonen for å gi litt tilgjengelighet og frihet til å velge en tilpasset vinkel for den resulterende gradienten. Bruken av gradientvinkelen vil bli sett i senere fase av denne opplæringen.

La oss gå tilbake til koden og hente brukerdataene.

Trinn 6

For å hente brukerdata, skriv inn følgende linjer med kode i hvis (totalt valgt> 0) blokkere:

hvis (totalSelected> 0) var gShift = Math.round (prompt ("Oppgi en verdi for gradient shift", "10", "Gradient Shift")); hvis (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vector vinkel for Gradient", "0.0", "Gradient Angle") hvis (gradAngle == null) gradAngle = 0;  //slutt om

I de ovennevnte kodelinjene ber vi en bruker å legge inn noen verdi for gradientforskyvning og gradientvinkel. De Math.round () funksjonen runder den angitte verdien til et helt tall. (Merk: Du kan hoppe over Math.round () hvis du ønsker å ha desimalverdier akseptert.) Standardverdiene for gShift og gradAngle er satt til henholdsvis "10" og "0,0".

Merk at vi også validerer de angitte verdiene for null og null. Null oppstår når en bruker klikker på Avbryt-knappen. Også, vi begrenser gShift verdi innenfor 0 og 100.

Når vi har gShift og gradAngle verdier, kan vi fortsette fremover for resten av koden.

Trinn 7 - Arbeide med de valgte objektene

Like etter gradAngle erklæring, skriv inn følgende linjer med kode:

 for (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] returnerer det valgte objektet en-for-en for hver iterasjon av j.

For hver valgt objekt gjør vi noen valideringer og sjekker. Disse kontrollene er avgjørende på dette stadiet. Den første kontrollen er å avgjøre om objektet er et sammensatt element eller et gruppeobjekt. Siden dette skriptet ikke fungerer direkte på grupper eller sammensatte objekter, er denne sjekken obligatorisk.

I neste nivå kontrollerer vi om det valgte objektet allerede er en gradient-, mønster- eller spotfarge. I så fall vil disse objektene hoppes over.

Det er enda en sjekk for grayColor-spesifikasjonen. GrayColor er litt annerledes enn CMYK Color-spesifikasjon.

En detaljert teknikk er involvert for behandling av objekter med grayColor-spesifikasjon, som jeg ikke inkluderer på dette stadiet av opplæringen. Denne teknikken er imidlertid inkludert i kildefilene for din interesse.

Trinn 8 - Velg og splitt fargen

Etter vår logikk og algoritme vil vi velge fargen for hvert valgt objekt og dele CMYK-verdiene i fire forskjellige variabler, som vist nedenfor:

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

Merk: Alle disse kodelinjene skal komme innenfor "Utfør fargekonvertering" -blokk, som vist i trinn 7.

pathItem.fillColor returnerer fyllfargen til en bestemt baneelement. I vårt tilfelle er banen det currentObject. Vi bruker color.cyan, color.magenta, color.yellow og farge svart egenskaper for å hente henholdsvis C, M, Y og K-verdiene i fire forskjellige variabler. Når vi har satt disse verdiene, kan vi enkelt kompensere dem med gShift.

Trinn 9 - Erklære farger for Gradient Rampstops

Vår resulterende gradient vil ha to gradientstopp. La oss betegne dem med startColor og endColor. Variabeldeklarasjonen for disse to rampestop-fargene vil være som vist nedenfor:

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

De CMYKColor er en CMYK-fargespesifikasjon som brukes til fargeobjekter. Her, den startColor og endColor er deklarert som nye CMYK farger.

Trinn 10 - Avviker startKolor og endColor

På dette stadiet har vi alle nødvendige ressurser for å skape en ny gradient. Vi har current (med separate CMYK-verdier), startColor, endColor og gShift. Vi kan nå angi de endelige fargeverdiene for startColor og endColor bruker offset teknikk.

Trinn 10.1 - Angi startColor

De startColor vil være den lettere delen av gradienten. Derfor vil vi trekke fra gShift fra C, M, Y og K verdier av current, resulterer i startColor.

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

Dette er enkelt, men vi må utføre noen sjekker. For eksempel, hva vil skje hvis currentCyan er allerede mindre enn gShift? Si, currentCyan er 10 og gShift er 20. Den resulterende cyanverdien for startColor blir 10-20 = (-) 10. For å overvinne dette problemet vil vi endre koden ovenfor til følgende kodelinjer:

 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;

Trinn 10.2 - Angi endColor

De endColor vil være den mørkere delen av gradienten. Derfor vil vi legge til gShift til C, M, Y og K-verdier eller current henholdsvis. Etter enkel tillegg bør koden se slik ut:

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

Igjen ser alt i orden. Men det er en komplikasjon: Hva skjer hvis tillegget av gShift resulterer i en verdi som er større enn 100? For eksempel, currentCyan er 95 og gShift er 20. Å legge disse to vil resultere som endColor.cyan = 115; som ikke er akseptabelt. Så vi vil kompensere dette med noen valideringer.

La oss lage en ny variabel gShiftEnd, som er lik 100-gShift. Deretter vil vi kontrollere om den nåværende verdien C, M, Y eller K er større enn gShiftEnd. I så fall vil vi sette endColors C, M, Y eller K-verdi til 100; ellers vil vi sette endColors C, M, Y eller K verdi ved å legge til gShift til nåværende C, M, Y eller K. Dette kan utarbeides fra det eksemplet vi nettopp så over.

Vi har nåværendeCyan = 95 og gShift = 20. Derfor gShiftEnd = 100 - 20. det vil si 80. Deretter er nåværendeCyan større enn gShiftEnd; så vi vil sette endColor.cyan til 100.

Etter dette prinsippet vil koden bli endret til følgende:

 gShiftEnd = 100-gShift; hvis (nåværendeCyan> gShiftEnd) endColor.cyan = 100; ellers endColor.cyan = currentCyan + gShift; hvis (currentMagenta> gShiftEnd) endColor.magenta = 100; ellers endColor.magenta = currentMagenta + gShift; hvis (currentYellow> gShiftEnd) endColor.yellow = 100; annet endColor.yellow = currentYellow + gShift; hvis (currentBlack> gShiftEnd) endColor.black = 100; ellers endColor.black = currentBlack + gShift;

Så frem til dette punktet vil hele koden se slik ut:

hvis (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Document Color Space er ikke CMYK. Endre dokumentfargemodus til CMYK-modus", "CMYK-dokument kreves");  // avslutte hoved hvis ellers alert ("Ingen av dokumentene er tilgjengelige eller dokumentet er tomt");  funksjon convertToGrad () var items = selection; var totalSelected = items.length; hvis (totalSelected> 0) var gShift = Math.round (prompt ("Oppgi en verdi for gradient shift", "10", "Gradient Shift")); hvis (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vector vinkel for Gradient", "0.0", "Gradient Angle") hvis (gradAngle == null) gradAngle = 0; for (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; ellers endColor.cyan = currentCyan + gShift; hvis (currentMagenta> gShiftEnd) endColor.magenta = 100; ellers endColor.magenta = currentMagenta + gShift; hvis (currentYellow> gShiftEnd) endColor.yellow = 100; annet endColor.yellow = currentYellow + gShift; hvis (currentBlack> gShiftEnd) endColor.black = 100; ellers endColor.black = currentBlack + gShift; // Gradient Declaration Block // Endif ellers alert ("Fyll en gjenstand med CMYK-farge. Alle objekter som inneholder \ ngradients, mønstre, spotfarger eller tomme fyllinger blir utelatt.", "Bare CMYK Colors Allowed");  else alert ("Dette skriptet fungerer bare med ikke-sammensatte objekter eller isolerte gruppeposter. \ nAlle elementer med grupper eller sammensatte objekter vil bli utelatt.", "Opphev eller isoler gruppepostene");  // endfor // end valgt annet alert ("Vennligst velg minst ett objekt"); 

Trinn 11 - Opprette den nye graden

Nå som vi har satt startColor og endColor; Vi kan fortsette med etableringen av den nye gradienten.

Trinn 11.1 - Erklær Gradienten

For å legge til en ny gradient, sett inn følgende linjer med kode i "// Gradient Declaration Block".

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

Dette vil legge til en ny lineær type Gradient i det nåværende aktive dokumentet.

Trinn 11.2 - Angi egenskapene til den nyopprettede gradienten

Legg til følgende kodelinjer like etter gradientdeklarasjonen:

 // Endre den første gradientstoppen newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Endre siste gradientstopp newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor;

gradientStop [0] er den første gradientstopp, mens, gradientStop [1] er den siste gradientstoppet. Hvis du ønsker mer gradientstopp, kan du betegne dem som gradientStop [2], gradientStop [3] og så videre.

rampPoint brukes til å angi rampunktsposisjonen til den tilhørende gradientStop. Vi har satt det første og siste rampunktet som henholdsvis 0 og 100. punktet brukes til å angi posisjonen til midtpunktet mellom to gradientstopp. Vi har satt dette til 50. Til slutt har vi tildelt verdiene til startColor og endColor til henholdsvis første og siste gradientStops.

Trinn 12 - Lag et gradvis fargebjekt

Vi er nesten ferdige med fargekonvertering og gradientdannelse. Deretter må vi bruke denne nyopprettede gradienten til det valgte objektet. For å gjøre det, vil vi opprette et Gradient Color Object refererer til den nylig opprettede gradienten.

Merk: Vi kan ikke bruke den nylig opprettede gradienten direkte som en utfylling Farge til objektet. For å kunne bruke denne gradienten må vi opprette et nytt Gradient Color-objekt, som vist nedenfor:

 // konstruere et Illustrator.GradientColor-objekt som refererer til // nyopprettede gradienten var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient;

Trinn 13 - Bruk Gradient

Til slutt vil vi fylle currentObject med colorOfGradient, som vist under:

 // få gjeldende banen, bruk ny gradient som sin fill currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);

Vi har brukt en rotasjonsmatrise til gjeldende objekt. Denne rotasjonsmatrisen benytter seg av gradientvinkelen for å transformere gradienten. Rotasjonens syntaks er:


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

Her har vi satt changeFillgradients til "sant" og resten til "falsk". Dette er en vanskelig måte å rotere gradientfargen i en bestemt vinkel på. Takk til John Wundes for å foreslå meg denne intelligente teknikken.

Trinn 14 - Det endelige skriptet

Det endelige skriptet etter fullstendig koding er vist nedenfor:

 hvis (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Document Color Space er ikke CMYK. Endre dokumentfargemodus til CMYK-modus", "CMYK-dokument kreves");  // avslutte hoved hvis ellers alert ("Ingen av dokumentene er tilgjengelige eller dokumentet er tomt");  funksjon convertToGrad () var items = selection; var totalSelected = items.length; hvis (totalSelected> 0) var gShift = Math.round (prompt ("Oppgi en verdi for gradient shift", "10", "Gradient Shift")); hvis (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vector vinkel for Gradient", "0.0", "Gradient Angle") hvis (gradAngle == null) gradAngle = 0; for (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; ellers endColor.cyan = currentCyan + gShift; hvis (currentMagenta> gShiftEnd) endColor.magenta = 100; ellers endColor.magenta = currentMagenta + gShift; hvis (currentYellow> gShiftEnd) endColor.yellow = 100; annet endColor.yellow = currentYellow + gShift; hvis (currentBlack> gShiftEnd) endColor.black = 100; ellers endColor.black = currentBlack + gShift; // Opprett en ny gradient // En ny gradient har alltid 2 stopper var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR; // Endre den første gradientstoppen newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Endre siste gradientstopp newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor; // konstruere et Illustrator.GradientColor-objekt som refererer til // nyopprettede gradienten var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient; // få gjeldende banen, bruk ny gradient som sin fill currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);  // endif else alert ("Fyll en gjenstand med CMYK-farge. Eventuelle objekter som inneholder \ ngradients, mønstre, flekkfarger eller tomme fyllinger blir utelatt.", "Bare CMYK farger tillatt");  else alert ("Dette skriptet fungerer bare med ikke-sammensatte objekter eller isolerte gruppeposter. \ nAlle elementer med grupper eller sammensatte objekter vil bli utelatt.", "Opphev eller isoler gruppepostene");  // endfor // end valgt annet alert ("Vennligst velg minst ett objekt"); 

Trinn 15 - Kjør skriptet

Lagre skriptet og opprett et nytt dokument i Adobe Illustrator. Deretter lager du noen objekter med flade CMYK-farger. Velg noen av disse objektene og utfør skriptet ved å følge metodene som beskrevet i trinn 2.1.

Du blir bedt om å angi Gradient Shift. Skriv inn en verdi for gShift.

Deretter blir du bedt om gradientvinkel. Skriv inn en verdi for gradAngle.

Til slutt ser du utgangen vist nedenfor.

Konklusjon og omfang

Vi har lært hvordan du skriver skript for å automatisere eller generere en effekt. Eksemplet som vises i denne opplæringen var en enkel demonstrasjon av hva vi kan utføre gjennom skript. Med dette eksempelet har vi lært hvordan CMYK-farger er representert i skript, hvordan de virker og hvordan objekter oppfører seg i DOM av Adobe Illustrator. I vår neste del vil vi dekke et Script som smelter den tilgjengelige gradientfargen til en flat CMYK-farge. Håper du likte denne innledende veiledningen til skript.

Abonner på Vectortuts + RSS-feed for å holde deg oppdatert med de nyeste vektoropplæringene og artiklene.