Scripting Illustrator - Converti un colore di processo piatto in un gradiente corrispondente

Tutti noi abbiamo abbastanza familiarità con Adobe Illustrator e la sua interfaccia utente. Nelle nostre attività creative quotidiane utilizziamo molte funzionalità, quali: menu, pallet, colori, plug-in e strumenti. Utilizziamo queste funzionalità sotto forma di un'interfaccia utente. Queste funzionalità dell'interfaccia utente ci vengono presentate tramite vari script e plug-in.

In un modo più semplice, possiamo codificare gli script per automatizzare le attività o ottenere qualche effetto in Illustrator. Segui insieme per sapere come farlo. In questo tutorial, codificheremo in Javascript uno script che convertirà un oggetto riempito con processo piatto nel suo gradiente di corrispondenza.

Vector Plus

Vuoi accedere ai file Vector Source completi e alle copie scaricabili di ogni tutorial, incluso questo? Unisciti a Vector Plus per soli 9 $ al mese.

Dettagli dell'esercitazione

  • Programma: Adobe Illustrator CS3 e ExtendedScript Toolkit
  • Difficoltà: intermedia
  • Tempo di completamento stimato: da 3 a 4 ore

SCOPO dello Script

Vogliamo che questo script esegua un compito molto semplice. In Adobe Illustrator, quando un utente seleziona alcuni oggetti riempiti con un Colore CMYK piatto ed esegue questo Script; gli oggetti devono essere convertiti in un riempimento sfumato CMYK corrispondente. Il gradiente di output sarà in qualche modo simile a un effetto di sovrapposizione del gradiente visto in modalità multiplo. Questo è mostrato nell'immagine qui sotto.

Quindi, lo scopo del nostro script è convertire un oggetto pieno CMYK piatto in un gradiente di corrispondenza scuro-chiaro. Questa è una semplice azione che è un buon esercizio per imparare come script per Illustrator.

Logica e Algoritmo

La logica per convertire un colore piatto in una sfumatura scura può essere compresa in cinque semplici passaggi:

  • Passo 1: Scegli il colore dell'oggetto corrente. vale a dire currentColor = colore dell'oggetto attualmente selezionato.
  • Passo 2: Crea un nuovo colore sfumato con due rampstops: startColor e endColor.
  • Passaggio 3: startColor = currentColor - gShift i.e. illuminare il colore originale.
  • Passaggio 4: endColor = currentColor + gShift i.e. scurire il colore originale.
  • Passaggio 5: Applica la nuova sfumatura con startColor e endColor all'oggetto.

Dove, gShift è la quantità di spostamento del gradiente che verrà inserito dall'utente. L'algoritmo di cui sopra può essere facilmente compreso dalla rappresentazione pittorica mostrata di seguito.

Oltre alla logica di base, implementeremo alcune convalide e verifiche per il corretto funzionamento di questo script. Queste convalide saranno trattate in varie fasi di questo tutorial. Prima di andare verso il tutorial attuale, acquisiamo familiarità con alcuni prerequisiti.

Introduzione allo scripting

Questo tutorial richiede alcune conoscenze di base dello scripting e del suo ambiente. Per familiarizzare con l'ambiente di scripting di Illustrator, puoi dare una rapida occhiata alla documentazione disponibile nella cartella di installazione di Illustrator vai su installation_Directory \ Adobe \ Adobe Illustrator CS3 \ Scripting \ Documentation. Qui troverai i seguenti documenti per iniziare con JavaScript:

  • Adobe Intro to Scripting.pdf
  • Illustrator CS3 Scripting Guide.pdf
  • Illustrator CS3 JavaScript Reference.pdf
  • Guida agli strumenti JavaScript CS3.pdf

Tipi di script

Esistono tre tipi di script che possiamo scrivere per Illustrator. Questi sono: AppleScript, JavaScript e VBScript. Poiché JavaScript è supportato su Windows e Mac OS, codificheremo la nostra logica in JavaScript. La sintassi e le notazioni sono molto simili allo standard JavaScript. L'unica differenza riguarda l'estensione. Per Illustrator, denoteremo tutti i file JavaScript con un'estensione .JSX invece del comune .js estensione.

Strumenti richiesti

Sebbene, puoi codificare l'intero JavaScript in uno qualsiasi dei tuoi editor di testo preferiti; è consigliabile usare il Adobe ExtendedScript Toolkit. Usando questa applicazione, possiamo eseguire, eseguire il debug, testare e verificare il nostro codice in modo sincrono con Illustrator.

Nota: durante questo tutorial, denoteremo ExtendedScript Toolkit con un breve modulo - ESTK.

Passo 1

Apri Adobe ExtendedScript Toolkit e crea un nuovo file JavaScript. Quindi, seleziona Adobe Illustrator dall'elenco a discesa per l'applicazione di destinazione. Questo dice all'ESTK che stiamo scrivendo JavaScript per una particolare applicazione, ad esempio Adobe Illustrator.

Passaggio 2: scrivere uno snippet di codice semplice

Nell'area di modifica del codice, inserisci le seguenti righe di codice:

se (app.documents.length> 0) alert ("Documenti disponibili"); altro avviso ("Nessun documento disponibile");

Nel codice sopra, stiamo controllando se ci sono documenti attualmente aperti in Illustrator. Questo è fatto tramite

app.documents.length. Ad esempio, l'oggetto di livello superiore in qualsiasi DOM dell'applicazione Adobe è l'oggetto dell'applicazione. Il prossimo è l'oggetto documento, che contiene inoltre oggetti come colori, livelli, testo, pagine, ecc. Salva questo file sul tuo disco rigido come "test.jsx".

Passaggio 2.1 - Esecuzione dello script

Esistono due modi per eseguire lo script:

1. Esecuzione da ESTK

Se desideri eseguire la sceneggiatura tramite ESTK, premi il pulsante Riproduci come mostrato di seguito.

Ciò avvierà automaticamente l'applicazione Adobe Illustrator e genererà il messaggio di avviso. È possibile interrompere o interrompere l'esecuzione premendo rispettivamente i pulsanti di pausa o di arresto.

2. Esecuzione da Illustrator

Per eseguire questo script da Illustrator, andare su File> Script> Altro script (comando + F12) e individuare il file appena creato "test.jsx". Dopo aver fatto clic su Apri, lo script verrà eseguito.

Quindi cosa hai visto? Un messaggio di avviso, "Nessun documento disponibile".

Successivamente, crea un paio di nuovi documenti in Illustrator ed esegui nuovamente questo script. Questa volta, vedrai un avviso, "I documenti sono disponibili."

Fino a questo punto, abbiamo scritto e testato un piccolo pezzo di codice. Questo è stato fatto come esercizio di riscaldamento per familiarizzare con ESTK e Illustrator. Nei prossimi passi, lavoreremo sullo script attuale.

Passaggio 3: la struttura del codice

Torna a ESTK ed elimina il codice di test che abbiamo creato nel passaggio 2. Successivamente, aggiungi le seguenti righe di codice in "test.jsx:"

 / * Per assicurarsi che ci sia almeno un documento disponibile in Illustrator e almeno un oggetto in quel documento funzioni su * / if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) // A assicurati che la Modalità colore documento sia CMYK se (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); // Chiama la funzione effettiva che conterrà tutta la logica else alert ("Spazio colore del documento non è CMYK. Cambia la Modalità colore documento in Modalità CMYK", "Documento CMYK richiesto");  else alert ("Nessun documento è disponibile o il documento è vuoto");  function convertTograd () // Logica per convertire il colore piatto in sfumatura

Nella precedente struttura di codice, stiamo semplicemente creando un controllo pre-requisito per la nostra funzione logica principale: converToGrad (). Ad esempio, la logica principale dovrebbe essere eseguita solo se sono soddisfatte le seguenti condizioni:

  1. Esiste almeno un documento con un oggetto, in modo che possiamo lavorarci sopra.
  2. Lo spazio colore del documento deve essere CMYK, poiché l'intera logica si basa sui colori CMYK.

Passaggio 3.1 - Comprensione delle entità DOM

app.documents.length restituisce il numero totale di documenti aperti in Illustrator.

Un ActiveDocument oggetto si riferisce al documento corrente (attivo) in cui si sta lavorando.

pathItems si riferisce a una raccolta di tutti i pathItem oggetti all'interno di un documento di Illustrator. Qualsiasi elemento grafico come rettangolo, ellisse, poligono, linea, forme personalizzate ecc. sono indicati come pathItem; e una raccolta di tutti questi pathItem sono indicati come pathItems. Quindi, app.activeDocument.pathItems.length restituirà il numero di entità grafiche contenute nel documento corrente.

Il documentColorSpace oggetto definisce la modalità colore del documento. Stiamo facendo questa convalida perché tutta la logica in questo script sarà basata sullo spazio colore CMYK.

La struttura di base del codice è stata impostata e completata. Successivamente, entreremo in convertToGrad () funzione.

Passaggio 4: iniziare con la logica principale

Il primo e più importante requisito della nostra logica principale è quello di recuperare il numero totale di elementi selezionati. Se nessun elemento è selezionato, lo script ti avviserà di selezionare almeno un oggetto. Per questo, aggiungi le seguenti righe di codice in convertToGrad () funzione:

function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) // procedi con la logica principale else alert ("Please select atleast one object");  // end convertToGrad

var items = selection crea una nuova variabile elementi e assegna l'intera selezione ad esso. Nella riga successiva, items.length restituisce il numero totale di elementi selezionati, che sono assegnati a totalSelected.

Passaggio 5: acquisizione dei dati dell'utente

Per convertire un colore piatto in una sfumatura, chiediamo all'utente di inserire alcuni valori per Gradient Shift e Gradient Angle. Ma prima di ciò, rivediamo quello che sono.

Sfumatura sfumatura: Questo è un valore numerico che decide quanto colore sarà aggiunto o rimosso dal colore originale. Questa è la parte centrale della nostra logica nella conversione di un colore piatto in un gradiente.

Come funziona un cambiamento graduale? Per capire come funziona, prendi in considerazione un semplice esempio di un oggetto riempito con valori CMYK: C = 50, M = 20, Y = 100 e K = 30 rispettivamente.

Successivamente, chiediamo all'utente di inserire un valore per Gradient Shift. Denotiamo questo valore di gShift, e l'utente ha inserito 10 per gShift.

Una volta che abbiamo il gShift valore, creeremo due gradienti per il nostro oggetto. La prima fermata, cioè la più leggera; avrà tutti i valori CMYK decrementati da gShift. Mentre l'ultima fermata, cioè la più scura, avrà tutti i valori CMYK incrementati di gShift.

In questo modo, verrà generato un gradiente da scuro a chiaro dal colore di riempimento effettivo. Eseguiremo anche alcune convalide per vincolare i valori CMYK compresi tra 0 e 100, in quanto aggiungendo o sottraendo a gShift valore può spostare i valori CMYK oltre 0 o 100.

Angolo di pendenza: Sebbene non faccia parte della logica di base, useremo questa funzione per fornire accessibilità e libertà di scegliere un angolo personalizzato per il gradiente risultante. L'uso dell'angolo di sfumatura sarà visto nella fase successiva di questo tutorial.

Torniamo al codice e recuperiamo i dati dell'utente.

Passaggio 6

Per recuperare i dati dell'utente, immettere le seguenti righe di codice nel file se (totaleSelezionato> 0) bloccare:

if (totalSelected> 0) var gShift = Math.round (prompt ("Immettere un valore per lo spostamento del gradiente", "10", "Sfumatura sfumatura")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Angolo vettoriale per Gradiente", "0.0", "Angolo sfumatura") if (gradAngle == null) gradAngle = 0;  //finisci se

Nelle linee di codice precedenti, chiediamo a un utente di inserire un valore per lo spostamento del gradiente e l'angolo del gradiente. Il Math.round () la funzione arrotonda il valore inserito in un numero intero. (Nota: puoi saltare Math.round () se si desidera che i valori decimali vengano accettati.) I valori predefiniti per gShift e gradAngle sono impostati rispettivamente su "10" e "0.0".

Si noti che stiamo anche convalidando i valori immessi per null e zero. Null si verifica quando un utente fa clic sul pulsante Annulla. Inoltre, stiamo limitando il gShift valore compreso tra 0 e 100.

Una volta che abbiamo il gShift e gradAngle valori, possiamo procedere in anticipo per il resto del codice.

Step 7 - Lavorare sugli oggetti selezionati

Subito dopo il gradAngle dichiarazione, inserire le seguenti righe di codice:

 per (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] restituisce l'oggetto selezionato uno per uno per ogni iterazione di j.

Per ogni oggetto selezionato, stiamo facendo alcune convalide e verifiche. Questi controlli sono cruciali in questa fase. Il primo controllo è determinare se l'oggetto è un oggetto composto o un elemento di gruppo. Poiché questo script non funziona direttamente su gruppi o oggetti composti, questo controllo è obbligatorio.

Nel livello successivo, stiamo controllando se l'oggetto selezionato è già un gradiente, un motivo o un colore spot. In tal caso, questi oggetti verranno saltati.

C'è un altro controllo per le specifiche grayColor. GrayColor è leggermente diverso rispetto alle specifiche CMYK Color.

Una tecnica dettagliata è coinvolta per il trattamento di oggetti con specifiche grayColor, che non includo in questa fase del tutorial. Tuttavia, questa tecnica è inclusa nei file di origine per il tuo interesse.

Passaggio 8: selezionare e dividere il colore

Secondo la nostra logica e l'algoritmo, selezioneremo il colore per ciascun oggetto selezionato e divideremo i suoi valori CMYK in quattro diverse variabili, come mostrato di seguito:

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

Nota: tutte queste righe di codice devono rientrare nel blocco "Esegui conversione colore", come mostrato nel passaggio 7.

pathItem.fillColor restituisce il colore di riempimento di un particolare oggetto del percorso. Nel nostro caso, il pathItem è currentObject. Stiamo usando color.cyan, color.magenta, color.yellow e colore nero proprietà per recuperare rispettivamente i valori C, M, Y e K in quattro diverse variabili. Una volta impostati questi valori, possiamo facilmente compensarli con gShift.

Passaggio 9 - Dichiarare i colori per le rampe di gradiente

Il nostro gradiente risultante avrà due stop di gradiente. Indichiamoli con StartColor e EndColor. La dichiarazione delle variabili per questi due colori rampstop sarà la seguente:

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

Il CMYKColor è una specifica di colore CMYK utilizzata per gli oggetti colore. Qui, il StartColor e EndColor sono dichiarati come nuovi colori CMYK.

Passaggio 10: compensazione di startColor e endColor

In questa fase, abbiamo tutte le risorse necessarie per creare un nuovo gradiente. abbiamo currentColor (con valori CMYK separati), StartColor, EndColor e gShift. Ora possiamo impostare i valori del colore finale per StartColor e EndColor usando la tecnica offset.

Passaggio 10.1 - Impostazione di startColor

Il StartColor sarà la parte più leggera del gradiente. Quindi, sottraiamo gShift dai valori di C, M, Y e K di currentColor, con il risultato di StartColor.

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

Questo è semplice, ma dobbiamo eseguire alcuni controlli. Ad esempio, cosa succederà se il currentCyan è già meno di gShift? Dire, currentCyan è 10 e gShift 20. Il valore cyan risultante per StartColor diventerà 10-20 = (-) 10. Per superare questo problema, modificheremo il set di codice sopra riportato nelle seguenti righe di codice:

 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;

Passaggio 10.2 - Impostazione di endColor

Il EndColor sarà la parte più scura del gradiente. Quindi, aggiungeremo gShift a C, M, Y e K valori o currentColor rispettivamente. Dopo la semplice aggiunta, il codice dovrebbe apparire come segue:

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

Ancora una volta, tutto sembra a posto. Ma c'è una complicazione: cosa accadrà se l'aggiunta di gShift ha un valore superiore a 100? Per esempio, currentCyan è 95 e gShift è 20. L'aggiunta di questi due risulterà come endColor.cyan = 115; che non è accettabile. Quindi compenseremo questo con alcune convalide.

Creiamo una nuova variabile gShiftEnd, che è uguale a 100-gShift. Successivamente, controlleremo se il valore corrente di C, M, Y o K è maggiore di gShiftEnd. In tal caso, imposteremo il valore C, M, Y o K di endColor su 100; altrimenti imposteremo il valore C, M, Y o K di endColor aggiungendo gShift all'attuale C, M, Y o K. Questo può essere elaborato dall'esempio che abbiamo appena visto sopra.

Abbiamo currentCyan = 95 e gShift = 20. Pertanto gShiftEnd = 100 - 20. vale a dire 80. Avanti, currentCyan è maggiore di gShiftEnd; quindi imposteremo endColor.cyan su 100.

Seguendo questo principio, il nostro codice verrà modificato come segue:

 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;

Quindi, fino a questo punto, il codice completo sarà simile a questo:

if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Spazio colore del documento non è CMYK. Cambia la Modalità colore documento in Modalità CMYK", "Documento CMYK richiesto");  // end main if else alert ("Nessun documento è disponibile o il documento è vuoto");  function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (prompt ("Immettere un valore per lo spostamento del gradiente", "10", "Sfumatura sfumatura")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Angolo vettoriale per Gradiente", "0.0", "Angolo sfumatura") if (gradAngle == null) gradAngle = 0; per (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; // Blocco dichiarazione gradiente // endif else alert ("Riempi un oggetto con il colore CMYK. Tutti gli oggetti contenenti \ ngradienti, motivi, tinte piatte o riempimenti vuoti verranno omessi.", "Sono ammessi solo colori CMYK");  else alert ("Questo script funziona solo con oggetti non composti o gruppi isolati. \ nQualsiasi elemento con gruppi o oggetti composti verrà omesso.", "Separa o isola gli elementi del gruppo");  // endfor // end selected else alert ("Si prega di selezionare almeno un oggetto"); 

Passaggio 11: creazione del nuovo gradiente

Ora che abbiamo impostato il StartColor e EndColor; possiamo procedere con la creazione del nuovo gradiente.

Passaggio 11.1 - Dichiarare il gradiente

Per aggiungere una nuova sfumatura, inserisci le seguenti righe di codice nella sezione "// Blocco dichiarazione gradiente".

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

Questo aggiungerà un nuovo gradiente di tipo lineare nel documento attivo corrente.

Passaggio 11.2 - Impostazione delle proprietà del gradiente appena creato

Aggiungi le seguenti righe di codice subito dopo la dichiarazione del gradiente:

 // Modifica il primo gradiente stop newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Modifica l'ultimo gradiente di stop newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor;

gradientStop [0] è il primo gradiente, mentre, gradientStop [1] è l'ultima fermata del gradiente. Se desideri avere più gradazioni di gradiente, puoi indicarle come gradientStop [2], gradientStop [3] e così via.

rampPoint è usato per impostare la posizione del punto di rampa del gradiente associato. Abbiamo impostato il primo e l'ultimo punto di rampa come 0 e 100 rispettivamente. midpoint viene utilizzato per impostare la posizione del punto centrale tra due arresti del gradiente. Lo abbiamo impostato a 50. Infine, abbiamo assegnato i valori di StartColor e EndColor al primo e all'ultimo gradiente, rispettivamente.

Passaggio 12: creare un oggetto colore sfumato

Abbiamo quasi finito la conversione del colore e la formazione del gradiente. Successivamente, dobbiamo applicare questo gradiente appena creato all'oggetto attualmente selezionato. Per fare ciò, creeremo un oggetto colore sfumato che si riferisce al gradiente appena creato.

Nota: non è possibile applicare il gradiente appena creato direttamente come colore di riempimento all'oggetto. Per utilizzare questa sfumatura, dovremo creare un nuovo oggetto Color Gradiente, come mostrato di seguito:

 // costruisce un oggetto Illustrator.GradientColor che fa riferimento al // gradiente appena creato var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient;

Passaggio 13: applica il gradiente

Finalmente, riempiremo il currentObject con il colorOfGradient, come mostrato di seguito:

 // recupera l'elemento del percorso corrente, applica una nuova sfumatura come riempimento currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);

Abbiamo applicato una matrice di rotazione all'oggetto corrente. Questa matrice di rotazione utilizza l'angolo del gradiente per trasformare il gradiente. La sintassi di rotazione è:


ruotare
(angolo
[, ChangePositions]
[, ChangeFillPatterns]
[, ChangeFillGradients]
[, ChangeStrokePattern]
[, RotateAbout])

Qui, abbiamo impostato changeFillgradients a "true" e il resto a "false". Questo è un modo complicato per ruotare il colore del gradiente con una particolare angolazione. Grazie a John Wundes per avermi suggerito questa tecnica intelligente.

Step 14 - The Final Script

Di seguito viene mostrato lo script finale dopo la codifica completa:

 if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Spazio colore del documento non è CMYK. Cambia la Modalità colore documento in Modalità CMYK", "Documento CMYK richiesto");  // end main if else alert ("Nessun documento è disponibile o il documento è vuoto");  function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (prompt ("Immettere un valore per lo spostamento del gradiente", "10", "Sfumatura sfumatura")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Angolo vettoriale per Gradiente", "0.0", "Angolo sfumatura") if (gradAngle == null) gradAngle = 0; per (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; // Crea un nuovo gradiente // Un nuovo gradiente ha sempre 2 stop var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR; // Modifica il primo gradiente stop newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Modifica l'ultimo gradiente di stop newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor; // costruisce un oggetto Illustrator.GradientColor che fa riferimento al // gradiente appena creato var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient; // recupera l'elemento del percorso corrente, applica una nuova sfumatura come riempimento currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);  // endif else alert ("Riempi un oggetto con il colore CMYK. Verranno omessi tutti gli oggetti contenenti \ ngradienti, motivi, tinte piatte o riempimenti vuoti.", "Sono ammessi solo colori CMYK");  else alert ("Questo script funziona solo con oggetti non composti o gruppi isolati. \ nQualsiasi elemento con gruppi o oggetti composti verrà omesso.", "Separa o isola gli elementi del gruppo");  // endfor // end selected else alert ("Si prega di selezionare almeno un oggetto"); 

Passaggio 15: Esegui lo script

Salvare lo script e creare un nuovo documento in Adobe Illustrator. Successivamente, crea alcuni oggetti con colori CMYK piatti. Seleziona alcuni di questi oggetti ed esegui lo script seguendo i metodi