Scripting Illustrator - Converteer een platte proceskleur naar een passend verloop

We kennen allemaal heel goed Adobe Illustrator en zijn gebruikersinterface. In onze dagelijkse creatieve taken gebruiken we veel functies, zoals: menu, pallets, kleuren, plug-ins en hulpmiddelen. We gebruiken deze functies in de vorm van een gebruikersinterface. Deze UI-functies worden ons aangeboden via verschillende scripts en plug-ins.

Op een eenvoudigere manier kunnen we scripts coderen om taken te automatiseren of om enig effect te verkrijgen in Illustrator. Volg mee om te leren hoe dat te doen. In deze zelfstudie zullen we in Javascript een script coderen dat een plat met een proces gevuld object in zijn overeenkomende gradiënt omzet.

Vector Plus

Wil je toegang tot de volledige Vector Source-bestanden en downloadbare exemplaren van elke tutorial, inclusief deze? Word lid van Vector Plus voor slechts 9 $ per maand.

Zelfstudiedetails

  • Programma: Adobe Illustrator CS3 en ExtendedScript Toolkit
  • Moeilijkheidsgraad: gemiddeld
  • Geschatte voltooiingstijd: 3 tot 4 uur

DOEL van het Script

We willen dat dit script een heel eenvoudige taak uitvoert. In Adobe Illustrator selecteert een gebruiker enkele objecten gevuld met een platte CMYK-kleur en voert dit script uit; de objecten worden omgezet in een overeenkomende CMYK-verloopvulling. De uitvoergradiënt komt enigszins overeen met een overloopeffect van het verloop dat wordt weergegeven in de multiplymodus. Dit wordt getoond in de afbeelding hieronder.

Daarom is het doel van ons script om een ​​vlak met CMYK gevuld object om te zetten in een donker-naar-licht overeenkomende gradiënt. Dit is een eenvoudige actie die een goede oefening is om te leren scripten voor Illustrator.

Logica en algoritme

De logica voor het omzetten van een effen kleur in een donker-naar-licht gradiënt kan in vijf eenvoudige stappen worden begrepen:

  • Stap 1: Kies de kleur van het huidige object. d.w.z. currentColor = kleur van het momenteel geselecteerde object.
  • Stap 2: Maak een nieuwe verloopkleur met twee rampstops: startColor en endColor.
  • Stap 3: startColor = currentColor - gShift, d.w.z. de oorspronkelijke kleur lichter maken.
  • Stap 4: endColor = currentColor + gShift, d.w.z. de oorspronkelijke kleur donkerder maken.
  • Stap 5: Pas het nieuwe verloop toe met startColor en endColor op het object.

Waar, gShift is de hoeveelheid gradiëntverschuiving die door de gebruiker wordt ingevoerd. Het bovenstaande algoritme kan eenvoudig worden begrepen aan de hand van de onderstaande afbeeldingen.

Afgezien van de kernlogica, zullen we enkele validaties en controles implementeren voor de goede werking van dit script. Deze validaties worden behandeld in verschillende stadia van deze tutorial. Voordat we op weg gaan naar de eigenlijke zelfstudie, zullen we eerst enkele vereisten leren kennen.

Introductie tot scripting

Deze tutorial vereist enige basiskennis van scripting en zijn omgeving. Om bekend te raken met Illustrator's Scripting Environment, kunt u snel de documentatie raadplegen die beschikbaar is in de installatiemap van installer en ga naar installation_Directory \ Adobe \ Adobe Illustrator CS3 \ Scripting \ Documentation. Hier vindt u de volgende documenten om aan de slag te gaan met JavaScript:

  • Adobe Intro to Scripting.pdf
  • Illustrator CS3 Scripting Guide.pdf
  • Illustrator CS3 JavaScript-referentie.pdf
  • JavaScript-hulpgids CS3.pdf

Typen scripts

Er zijn drie soorten scripts die we voor Illustrator kunnen schrijven. Dit zijn: AppleScript, JavaScript en VBScript. Omdat JavaScript wordt ondersteund op zowel Windows als Mac OS, coderen we onze logica in JavaScript. De syntaxis en notaties lijken erg op de standaard JavaScript. Het enige verschil gaat over de extensie. Voor Illustrator zullen we alle JavaScript-bestanden met een extensie aanduiden .JSX in plaats van het gewone .js uitbreiding.

Vereiste hulpmiddelen

Hoewel, u kunt het volledige JavaScript coderen in een van uw favoriete teksteditor; het is raadzaam om de Adobe ExtendedScript Toolkit. Door deze applicatie te gebruiken, kunnen we onze code synchroon met Illustrator uitvoeren, debuggen, testen en controleren.

Opmerking: gedurende deze zelfstudie zullen we ExtendedScript Toolkit aanduiden met een korte vorm - ESTK.

Stap 1

Open Adobe ExtendedScript Toolkit en maak een nieuw JavaScript-bestand. Selecteer vervolgens Adobe Illustrator in de vervolgkeuzelijst voor de doeltoepassing. Dit vertelt de ESTK dat we JavaScript schrijven voor een bepaalde toepassing, d.w.z. Adobe Illustrator.

Stap 2 - Schrijf een eenvoudig codefragment

Voer in het codebewerkingsgebied de volgende regels in:

if (app.documents.length> 0) alert ("Documenten zijn beschikbaar"); else alert ("Geen documenten beschikbaar");

In de bovenstaande code controleren we of er documenten zijn die momenteel in Illustrator worden geopend. Dit gebeurt via

app.documents.length. Het object op het hoogste niveau in een Adobe Application DOM is het toepassingsobject. Het volgende is het documentobject, dat verder objecten bevat zoals kleuren, lagen, tekst, pagina's enz. Bewaar dit bestand op uw harde schijf als "test.jsx".

Stap 2.1 - Het uitvoeren van het script

Er zijn twee manieren om het script uit te voeren:

1. Uitvoeren van ESTK

Als u uw script via ESTK wilt uitvoeren, drukt u op de knop Afspelen zoals hieronder wordt getoond.

Hierdoor wordt de Adobe Illustrator-toepassing automatisch gestart en wordt het waarschuwingsbericht gegenereerd. U kunt de uitvoering stoppen of stoppen door op de pauzeknop of de stopknop te drukken.

2. Uitvoeren vanuit Illustrator

Als u dit script vanuit Illustrator wilt uitvoeren, gaat u naar Bestand> Scripts> Ander script (Command + F12) en lokaliseert u het zojuist gemaakte bestand 'test.jsx'. Nadat u op Openen hebt geklikt, wordt het script uitgevoerd.

Wat heb je gezien? Een waarschuwingsbericht: "Geen documenten beschikbaar."

Maak vervolgens een paar nieuwe documenten in Illustrator en voer dit script opnieuw uit. Deze keer ziet u een waarschuwing: "Documenten zijn beschikbaar."

Tot nu toe hebben we een klein stukje code geschreven en getest. Dit werd gedaan als een opwarmingsoefening om vertrouwd te raken met ESTK en Illustrator. In onze volgende stappen gaan we aan het daadwerkelijke script werken.

Stap 3 - De codestructuur

Ga terug naar ESTK en verwijder de testcode die we in stap 2 hebben gemaakt. Voeg vervolgens de volgende regels toe aan "test.jsx:"

 / * Om er zeker van te zijn dat er ten minste één document beschikbaar is in Illustrator en ten minste één object in dat document om aan te werken * / if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) // To zorg ervoor dat de documentkleurmodus CMYK is als (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); // Oproep voor de werkelijke functie die alle logica zal bevatten else alert ("Document Color Space is not CMYK." Wijzig de Document Color Mode naar CMYK Mode "," CMYK Document required ");  else alert ("Er is geen document beschikbaar of het document is leeg");  function convertTograd () // Logica voor het converteren van egale kleur naar verloop

In de bovenstaande codestructuur creëren we eenvoudig een eerste vereiste voor onze belangrijkste logische functie - converToGrad (). d.w.z. De hoofdlogica moet alleen worden uitgevoerd als aan de volgende voorwaarden is voldaan:

  1. Er bestaat ten minste één document met één object, zodat we eraan kunnen werken.
  2. De documentkleurruimte moet CMYK zijn, omdat de gehele logica is gebaseerd op CMYK-kleuren.

Stap 3.1 - De DOM-entiteiten begrijpen

app.documents.length geeft als resultaat het totale aantal documenten dat is geopend in Illustrator.

Een ActiveDocument object verwijst naar het huidige (actieve) document waarin u werkt.

pathItems verwijst naar een verzameling van alle pathItem objecten in een Illustrator-document. Elk grafisch item zoals rechthoek, ovaal, veelhoek, lijn, aangepaste vormen enz. worden aangeduid als pathItem; en een verzameling van al deze pathItem worden aangeduid als pathItems. Vandaar, app.activeDocument.pathItems.length retourneert het aantal grafische entiteiten in het huidige document.

De documentColorSpace object definieert de kleurmodus van het document. We voeren deze validatie uit omdat alle logica in dit script gebaseerd zal zijn op de CMYK-kleurruimte.

De basiscodestructuur is helemaal klaar en af. Vervolgens gaan we verder convertToGrad () functie.

Stap 4 - Beginnend met de hoofdlogica

De eerste en belangrijkste eis van onze hoofdlogica is om het totale aantal geselecteerde items op te halen. Als er geen items zijn geselecteerd, moet het script u waarschuwen om ten minste één object te selecteren. Voeg hiervoor de volgende regels toe convertToGrad () functie:

function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) // ga verder met de hoofdlogica else alert ("Selecteer ten minste één object");  // end convertToGrad

var items = selectie maakt een nieuwe variabele aan items en wijst er een volledige selectie aan toe. In de volgende regel, items.length retourneert het totale aantal geselecteerde items waaraan is toegewezen totalSelected.

Stap 5 - De gebruikersgegevens verkrijgen

Als u een effen kleur wilt omzetten in een verloop, vragen we de gebruiker om een ​​aantal waarden in te voeren voor verloopverschuiving en de verloophoek. Maar laten we eerst eens bekijken wat ze zijn.

Verloopverschuiving: Dit is een numerieke waarde die bepaalt hoeveel kleur wordt toegevoegd aan of verwijderd uit de oorspronkelijke kleur. Dit is het kerngedeelte van onze logica bij het converteren van een effen kleur in een verloop.

Hoe werkt een verloopverschuiving? Om te begrijpen hoe het werkt, overweeg dan een eenvoudig voorbeeld van een object gevuld met CMYK-waarden: C = 50, M = 20, Y = 100 en K = 30 respectievelijk.

Vervolgens vragen we de gebruiker om een ​​waarde in te voeren voor Gradient Shift. Laten we deze waarde aangeven door gShift, en de gebruiker heeft er 10 ingegeven gShift.

Zodra we de hebben gShift waarde, maken we twee gradiëntstops voor ons object. De eerste stop, d.w.z. de lichtere; zorgt ervoor dat alle CMYK-waarden worden verlaagd met gShift. Terwijl, de laatste stop, d.w.z. de donkerdere, alle CMYK-waarden zal hebben verhoogd met gShift.

Op deze manier wordt een donker tot licht verloop gegenereerd op basis van de werkelijke vulkleur. We zullen ook enkele validaties uitvoeren om de CMYK-waarden binnen 0 en 100 te beperken, omdat a. Wordt toegevoegd of afgetrokken gShift waarde kan de CMYK-waarden verder dan 0 of 100 verplaatsen.

Verloop hoek: Hoewel dit geen deel uitmaakt van de kernlogica, zullen we deze functie gebruiken om enige toegankelijkheid en vrijheid te bieden om een ​​aangepaste hoek voor de resulterende gradiënt te kiezen. Het gebruik van de hellingshoek wordt in de latere fase van deze zelfstudie weergegeven.

Laten we teruggaan naar de code en de gebruikersgegevens ophalen.

Stap 6

Om de gebruikersgegevens op te halen, voert u de volgende regels in de code in if (totalSelected> 0) blok:

if (totalSelected> 0) var gShift = Math.round (prompt ("Waarde invoeren voor verloopverschuiving", "10", "Verloopverschuiving")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vectorhoek voor verloop", "0.0", "verloophoek") if (gradAngle == null) gradAngle = 0;  //stop als

In de bovenstaande coderegels vragen we een gebruiker om een ​​waarde in te voeren voor de verschuivingsverschuiving en de hellingshoek. De Math.round () functie rondt de ingevoerde waarde af in een geheel getal. (Opmerking: u kunt overslaan Math.round () als u decimale waarden wilt laten accepteren.) De standaardwaarden voor gShift en gradAngle zijn ingesteld op respectievelijk "10" en "0.0".

Merk op dat we ook de ingevoerde waarden voor nul en nul valideren. Null wordt aangetroffen wanneer een gebruiker op de knop Annuleren klikt. Ook beperken we de gShift waarde binnen 0 en 100.

Zodra we de hebben gShift en gradAngle waarden, we kunnen doorgaan met de rest van de code.

Stap 7 - Werken aan de geselecteerde objecten

Vlak na de gradAngle aangifte, voer de volgende regels in:

 voor (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] geeft het geselecteerde object één voor één terug voor elke iteratie van j.

Voor elk geselecteerd object voeren we enkele validaties en controles uit. Deze controles zijn in dit stadium cruciaal. De eerste controle is om te bepalen of het object een samengesteld artikel of een groepsitem is. Aangezien dit script niet rechtstreeks op groepen of samengestelde objecten werkt, is deze controle verplicht.

In het volgende niveau controleren we of het geselecteerde object al een verloop, patroon of steunkleur is. Als dit het geval is, worden deze objecten overgeslagen.

Er is nog een controle op de grayColor-specificatie. GrayColor is iets anders dan de CMYK-kleurspecificatie.

Een gedetailleerde techniek is betrokken voor het behandelen van objecten met de grayColor-specificatie, die ik in dit stadium van de tutorial niet opneem. Deze techniek is echter opgenomen in de bronbestanden voor uw interesse.

Stap 8 - Kies en splits de kleur

Volgens onze logica en ons algoritme zullen we de kleur voor elk geselecteerd object kiezen en de CMYK-waarden in vier verschillende variabelen splitsen, zoals hieronder getoond:

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

Opmerking: Al deze coderegels moeten worden weergegeven in het blok "Kleurconversie uitvoeren", zoals weergegeven in stap 7.

pathItem.fillColor retourneert de vulkleur van een bepaald paditem. In ons geval is het pathItem dat currentObject. Wij gebruiken color.cyan, color.magenta, kleur geel en de kleur zwart eigenschappen om de C-, M-, Y- en K-waarden respectievelijk in vier verschillende variabelen op te halen. Zodra we deze waarden hebben ingesteld, kunnen we ze gemakkelijk compenseren gShift.

Stap 9 - Verklaar kleuren voor Gradient Rampstops

Onze resulterende gradiënt heeft twee gradiëntstops. Laten we ze aangeven met startkleur en endColor. De variabele verklaring voor deze twee rampstop kleuren zal zijn zoals hieronder getoond:

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

De CMYKColor is een CMYK-kleurspecificatie die wordt gebruikt voor kleurobjecten. Hier de startkleur en endColor worden gedeclareerd als nieuwe CMYK-kleuren.

Stap 10 - Het compenseren van de startColor en endColor

In dit stadium beschikken we over alle benodigde middelen om een ​​nieuw verloop te creëren. Wij hebben currentcolor (met afzonderlijke CMYK-waarden), startkleur, endColor en gShift. We kunnen nu de uiteindelijke kleurwaarden instellen startkleur en endColor met behulp van offset-techniek.

Stap 10.1 - Instellen van de startColor

De startkleur zal het lichtere deel van het verloop zijn. Daarom zullen we aftrekken gShift van C, M, Y en K waarden van currentcolor, met als resultaat startkleur.

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

Dit is eenvoudig, maar we moeten wat controles uitvoeren. Wat zal er bijvoorbeeld gebeuren als de currentCyan is al minder dan gShift? Zeggen, currentCyan is 10 en gShift is 20. De resulterende cyaanwaarde voor startkleur wordt 10-20 = (-) 10. Om dit probleem te verhelpen, zullen we de bovenstaande reeks code in de volgende coderegels wijzigen:

 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;

Stap 10.2 - Instellen van de endColor

De endColor wordt het donkerdere deel van het verloop. Daarom zullen we toevoegen gShift naar C, M, Y en K-waarden of currentcolor respectievelijk. Na eenvoudige toevoeging zou de code er als volgt uit moeten zien:

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

Nogmaals, alles ziet er goed uit. Maar er is één complicatie: wat zal er gebeuren als de toevoeging van gShift resulteert in een waarde groter dan 100? Bijvoorbeeld, currentCyan is 95 en gShift is 20. Het optellen van deze twee resulteert als endColor.cyan = 115; wat niet acceptabel is. Dus we zullen dit compenseren met enkele validaties.

Laten we een nieuwe variabele maken gShiftEnd, wat gelijk is aan 100-gShift. Vervolgens zullen we controleren of de huidige C, M, Y of K-waarde groter is dan gShiftEnd. Als dat het geval is, stellen we de C-, M-, Y- of K-waarde van de eindkleur in op 100; anders zullen we de C, M, Y of K-waarde van endColor instellen door toe te voegen gShift naar de huidige C, M, Y of K. Dit kan worden uitgewerkt vanuit het voorbeeld dat we zojuist hierboven hebben gezien.

We hebben currentCyan = 95 en gShift = 20. Daarom is gShiftEnd = 100 - 20. d.w.z. 80. Vervolgens is currentCyan groter dan gShiftEnd; dus zullen we endColor.cyan op 100 zetten.

Volgens dit principe wordt onze code aangepast aan het volgende:

 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 (currentGeel> gShiftEnd) endColor.yellow = 100; else endColor.yellow = currentYellow + gShift; if (currentBlack> gShiftEnd) endColor.black = 100; else endColor.black = currentBlack + gShift;

Tot nu toe ziet de volledige code er dus als volgt uit:

if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Document Color Space is niet CMYK." "Documentkleurmodus wijzigen naar CMYK-modus", "CMYK-document vereist");  // end main if else alert ("Er is geen document beschikbaar of het document is leeg");  function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (prompt ("Waarde invoeren voor verloopverschuiving", "10", "Verloopverschuiving")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vectorhoek voor verloop", "0.0", "verloophoek") if (gradAngle == null) gradAngle = 0; voor (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 (currentGeel> gShiftEnd) endColor.yellow = 100; else endColor.yellow = currentYellow + gShift; if (currentBlack> gShiftEnd) endColor.black = 100; else endColor.black = currentBlack + gShift; // Gradient Declaration Block // endif else alert ("vul een object met CMYK-kleur.) Alle objecten met \ ngradiënten, patronen, steunkleuren of lege opvullingen worden weggelaten.", "Alleen CMYK-kleuren toegestaan");  else alert ("Dit script werkt alleen met objecten van niet-samengestelde objecten of geïsoleerde groepen. \ nAlle items met groepen of samengestelde objecten worden weggelaten.", "Groepsgroeperen of isoleren van de groepsitems");  // endfor // end selected else alert ("Selecteer ten minste één object"); 

Stap 11 - Het nieuwe verloop maken

Nu dat we de startkleur en endColor; we kunnen doorgaan met het maken van het nieuwe verloop.

Stap 11.1 - Verklaar het verloop

Om een ​​nieuw verloop toe te voegen, voeg je de volgende regels toe in de "// Gradient Declaration Block".

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

Hiermee wordt een nieuw lineair type verloop toegevoegd aan het huidige actieve document.

Stap 11.2 - De eigenschappen van het nieuw gemaakte verloop instellen

Voeg de volgende regels code toe net na de verloopverklaring:

 // Wijzig de eerste verloopstop newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Wijzig de laatste verloopstop newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor;

gradientStop [0] is de eerste gradiëntstop, terwijl, gradientStop [1] is de laatste verloopstop. Als u meer verloopstops wilt hebben, kunt u ze aangeven als gradientStop [2], gradientStop [3] enzovoorts.

rampPoint wordt gebruikt om de hellingpuntpositie van de bijbehorende gradientStop in te stellen. We hebben het eerste en laatste hellingspunt als respectievelijk 0 en 100 ingesteld. middelpunt wordt gebruikt om de positie van het middelste punt tussen twee gradiëntstops in te stellen. We hebben dit op 50 gezet. Tot slot hebben we de waarden van toegewezen startkleur en endColor naar de eerste en laatste verloopstops respectievelijk.

Stap 12 - Creëer een kleurobject met kleurverloop

We zijn bijna klaar met kleurconversie en gradiëntvorming. Vervolgens moeten we dit nieuw gemaakte verloop toepassen op het momenteel geselecteerde object. Om dat te doen, zullen we een kleurverloop met kleurverloop creëren dat verwijst naar het nieuw gemaakte verloop.

Opmerking: We kunnen het nieuw gemaakte verloop niet direct als opvulkleur toepassen op het object. Om dit verloop te gebruiken, moeten we een nieuw kleurverloopobject maken, zoals hieronder weergegeven:

 // construeer een Illustrator.GradientColor-object verwijzend naar de // nieuw gemaakte gradiënt var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient;

Stap 13 - Pas het verloop toe

Ten slotte vullen we de currentObject met de colorOfGradient, zoals hieronder getoond:

 // verkrijg het huidige paditem, pas een nieuw verloop toe als zijn vulling currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);

We hebben een rotatiematrix toegepast op het huidige object. Deze rotatiematrix maakt gebruik van de hellingshoek om de gradiënt te transformeren. De syntaxis van rotatie is:


draaien
(hoek
[, ChangePositions]
[, ChangeFillPatterns]
[, ChangeFillGradients]
[, ChangeStrokePattern]
[, RotateAbout])

Hier hebben we vastgesteld changeFillgradients naar "waar" en de rest naar "false". Dit is een lastige manier om de verloopkleur in een bepaalde hoek te roteren. Dank aan John Wundes dat hij mij deze intelligente techniek heeft voorgesteld.

Stap 14 - Het definitieve script

Het definitieve script na volledige codering wordt hieronder getoond:

 if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("Document Color Space is niet CMYK." "Documentkleurmodus wijzigen naar CMYK-modus", "CMYK-document vereist");  // end main if else alert ("Er is geen document beschikbaar of het document is leeg");  function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (prompt ("Waarde invoeren voor verloopverschuiving", "10", "Verloopverschuiving")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) gShift = 100; var gradAngle = prompt ("Vectorhoek voor verloop", "0.0", "verloophoek") if (gradAngle == null) gradAngle = 0; voor (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 (currentGeel> gShiftEnd) endColor.yellow = 100; else endColor.yellow = currentYellow + gShift; if (currentBlack> gShiftEnd) endColor.black = 100; else endColor.black = currentBlack + gShift; // Maak een nieuw verloop // Een nieuw verloop heeft altijd 2 stops var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR; // Wijzig de eerste verloopstop newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Wijzig de laatste verloopstop newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor; // construeer een Illustrator.GradientColor-object verwijzend naar de // nieuw gemaakte gradiënt var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient; // verkrijg het huidige paditem, pas een nieuw verloop toe als zijn vulling currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);  // endif else alert ("vul een object met de CMYK-kleur.) Alle objecten met \ ngradiënten, patronen, steunkleuren of lege opvullingen worden weggelaten.", "Alleen CMYK-kleuren toegestaan");  else alert ("Dit script werkt alleen met objecten van niet-samengestelde objecten of geïsoleerde groepen. \ nAlle items met groepen of samengestelde objecten worden weggelaten.", "Groepsgroeperen of isoleren van de groepsitems");  // endfor // end selected else alert ("Selecteer ten minste één object"); 

Stap 15 - Voer het script uit

Sla het script op en maak een nieuw document in Adobe Illustrator. Maak vervolgens enkele objecten met platte CMYK-kleuren. Selecteer enkele van deze objecten en voer het script uit door de methoden te volgen zoals beschreven in stap 2.1.

U wordt gevraagd de Verhogingsverschuiving in te voeren. Voer een waarde in voor gS