Scripting Illustrator - Convertir une couleur de processus uniforme en un dégradé adapté

Nous connaissons tous très bien Adobe Illustrator et son interface utilisateur. Dans nos tâches créatives quotidiennes, nous utilisons de nombreuses fonctionnalités, telles que: menu, palettes, couleurs, plug-ins et outils. Nous utilisons ces fonctionnalités sous la forme d'une interface utilisateur. Ces fonctionnalités de l'interface utilisateur nous sont présentées à travers divers scripts et plug-ins..

De manière plus simple, nous pouvons coder des scripts pour automatiser des tâches ou obtenir un effet dans Illustrator. Suivez le long pour apprendre à le faire. Dans ce tutoriel, nous allons coder en Javascript un script qui convertira un objet rempli de processus simples en son dégradé correspondant.

Vecteur plus

Vous voulez accéder à l'intégralité des fichiers Vector Source et aux copies téléchargeables de chaque didacticiel, y compris celui-ci? Rejoignez Vector Plus pour seulement 9 $ par mois.

Détails du tutoriel

  • Programme: Adobe Illustrator CS3 et ExtendedScript Toolkit
  • Difficulté: Intermédiaire
  • Temps d'exécution estimé: 3 à 4 heures

But du script

Nous voulons que ce script exécute une tâche très simple. Dans Adobe Illustrator, lorsqu'un utilisateur sélectionne des objets remplis avec une couleur plat CMJN et exécute ce script; les objets doivent être convertis en un remplissage dégradé CMJN correspondant. Le dégradé de sortie sera un peu similaire à un effet de superposition de dégradé vu en mode multiplication. Ceci est montré dans l'image ci-dessous.

Par conséquent, le but de notre script est de convertir un objet plat rempli de CMJN en un dégradé de correspondance sombre à clair. C’est une action simple qui est un bon exercice pour apprendre à écrire des scripts pour Illustrator..

Logique et algorithme

La logique permettant de convertir une couleur plate en un dégradé allant du foncé au clair peut être comprise en cinq étapes simples:

  • Étape 1: Choisissez la couleur de l'objet actuel. CurrentColor = couleur de l'objet actuellement sélectionné.
  • Étape 2: Créer une nouvelle couleur de dégradé avec deux rampes: startColor et endColor.
  • Étape 3: startColor = currentColor - gShift, c'est-à-dire éclaircir la couleur d'origine.
  • Étape 4: endColor = currentColor + gShift, c'est-à-dire assombrir la couleur d'origine.
  • Étape 5: Appliquer le nouveau dégradé avec startColor et endColor à l'objet.

Où, gShift est la quantité de décalage qui sera entrée par l'utilisateur. L'algorithme ci-dessus peut être facilement compris à partir de la représentation illustrée ci-dessous.

Outre la logique de base, nous allons implémenter des validations et des contrôles pour le bon fonctionnement de ce script. Ces validations seront abordées à différentes étapes de ce tutoriel. Avant de vous diriger vers le didacticiel proprement dit, familiarisons-nous avec certains prérequis.

Introduction à l'écriture de scripts

Ce tutoriel nécessite des connaissances de base sur les scripts et leur environnement. Pour vous familiariser avec l'environnement de script d'Illustrator, vous pouvez consulter rapidement la documentation disponible dans le dossier d'installation de votre illustrateur à l'adresse répertoire_installation \ Adobe \ Adobe Illustrator CS3 \ Scripting \ Documentation. Vous trouverez ici les documents suivants pour commencer à utiliser JavaScript:

  • Adobe Intro to Scripting.pdf
  • Illustrator CS3 Scripting Guide.pdf
  • Illustrator CS3 JavaScript Reference.pdf
  • Guide des outils JavaScript CS3.pdf

Types de scripts

Il existe trois types de scripts que nous pouvons écrire pour Illustrator. Ceux-ci sont: AppleScript, JavaScript et VBScript. Étant donné que JavaScript est pris en charge sous Windows et Mac OS, nous allons coder notre logique en JavaScript. La syntaxe et les notations sont très similaires au JavaScript standard. La seule différence concerne l'extension. Pour Illustrator, nous désignerons tous les fichiers JavaScript avec une extension .jsx au lieu de la commune .js extension.

Outils requis

Bien que vous puissiez coder l'intégralité du code JavaScript dans n'importe quel éditeur de texte préféré; il est conseillé d'utiliser le Adobe ExtendedScript Toolkit. En utilisant cette application, nous pouvons exécuter, déboguer, tester et vérifier notre code de manière synchrone avec Illustrator..

Remarque: Tout au long de ce didacticiel, nous allons décrire ExtendedScript Toolkit avec un formulaire abrégé - ESTK..

Étape 1

Ouvrez Adobe ExtendedScript Toolkit et créez un nouveau fichier JavaScript. Ensuite, sélectionnez Adobe Illustrator dans la liste déroulante de l'application cible. Ceci indique à ESTK que nous écrivons du code JavaScript pour une application particulière, à savoir Adobe Illustrator..

Étape 2 - Écrire un extrait de code simple

Dans la zone d'édition de code, insérez les lignes de code suivantes:

if (app.documents.length> 0) alert ("Les documents sont disponibles"); else alert ("Aucun document disponible");

Dans le code ci-dessus, nous vérifions si des documents sont actuellement ouverts dans Illustrator. Cela se fait via

app.documents.length. C'est-à-dire que l'objet de niveau supérieur dans n'importe quel Adobe Application DOM est l'objet d'application. Vient ensuite l'objet Document, qui contient en outre des objets tels que des couleurs, des calques, du texte, des pages, etc. Enregistrez ce fichier sur votre disque dur sous le nom "test.jsx".

Étape 2.1 - Exécution du script

Il y a deux manières d'exécuter le script:

1. Exécution depuis ESTK

Si vous souhaitez exécuter votre script via ESTK, appuyez sur le bouton Lecture comme indiqué ci-dessous..

Cela lancera automatiquement l'application Adobe Illustrator et générera le message d'alerte. Vous pouvez arrêter ou arrêter l'exécution en appuyant sur les boutons pause ou arrêt..

2. Exécuter depuis Illustrator

Pour exécuter ce script à partir d'Illustrator, sélectionnez Fichier> Scripts> Autre script (Commande + F12) et localisez le fichier "test.jsx" que vous venez de créer. Après avoir cliqué sur Ouvrir, le script sera exécuté..

Alors qu'as-tu vu? Un message d'alerte "Aucun document disponible".

Créez ensuite quelques nouveaux documents dans Illustrator et exécutez à nouveau ce script. Cette fois, vous verrez une alerte "Les documents sont disponibles".

Jusqu'à présent, nous avons écrit et testé un petit morceau de code. Cela a été fait comme un exercice d’échauffement pour se familiariser avec ESTK et Illustrator. Dans nos prochaines étapes, nous allons travailler sur le script réel.

Étape 3 - La structure du code

Revenez à ESTK et supprimez le code de test créé à l'étape 2. Ensuite, ajoutez les lignes de code suivantes dans "test.jsx:"

 / * Pour s’assurer qu’il existe au moins un document disponible dans Illustrator et au moins un objet de ce document sur lequel travailler * / if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) // To assurez-vous que le mode de couleur du document est CMJN si (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad (); // Appel de la fonction réelle qui contiendra toute la logique else alert ("L'espace couleur du document n'est pas CMJN. Changez le mode couleur du document en mode CMJN", "Document CMJN requis");  else alert ("Aucun document n'est disponible ou le document est vide");  function convertTograd () // Logique pour convertir une couleur plate en dégradé

Dans la structure de code ci-dessus, nous créons simplement une vérification préalable pour notre fonction logique principale - converToGrad (). C'est-à-dire que la logique principale ne devrait s'exécuter que si les conditions suivantes sont remplies:

  1. Au moins un document avec un objet existe, afin que nous puissions y travailler.
  2. L’espace colorimétrique du document doit être CMJN, car toute la logique est basée sur les couleurs CMJN..

Étape 3.1 - Comprendre les entités DOM

app.documents.length renvoie le nombre total de documents ouverts dans Illustrator.

Un document actif objet fait référence au document (actif) actuel dans lequel vous travaillez.

pathItems se réfère à une collection de tous les pathItem objets contenus dans un document Illustrator. N'importe quel élément graphique tel qu'un rectangle, une ellipse, un polygone, une ligne, des formes personnalisées, etc. pathItem; et une collection de tous ces pathItem sont notés comme pathItems. Par conséquent, app.activeDocument.pathItems.length renverra le nombre d'entités graphiques contenues dans le document actuel.

le documentColorSpace objet définit le mode de couleur du document. Nous procédons à cette validation car toute la logique de ce script sera basée sur l’espace couleur CMJN..

La structure de code de base est tout défini et fait. Ensuite, nous entrerons dans convertToGrad () une fonction.

Étape 4 - Commencer avec la logique principale

La principale exigence de notre logique principale consiste à extraire le nombre total d'éléments sélectionnés. Si aucun élément n'est sélectionné, le script vous demandera de sélectionner au moins un objet. Pour cela, ajoutez les lignes de code suivantes dans convertToGrad () une fonction:

fonction convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) // continue avec la logique principale else alert ("Veuillez sélectionner au moins un objet");  // fin de convertToGrad

var items = sélection crée une nouvelle variable articles et lui assigne toute la sélection. Dans la ligne suivante, items.length renvoie le nombre total d'éléments sélectionnés, affectés à totalSélectionné.

Étape 5 - Obtention des données utilisateur

Pour convertir une couleur uniforme en dégradé, nous inviterons l'utilisateur à saisir certaines valeurs pour Décalage de dégradé et Angle de dégradé. Mais avant cela, passons en revue ce qu'ils sont.

Gradient Shift: C'est une valeur numérique qui détermine la quantité de couleur à ajouter ou à supprimer de la couleur d'origine. C’est l’essentiel de notre logique pour convertir une couleur plate en dégradé..

Comment fonctionne un changement de dégradé? Pour comprendre son fonctionnement, considérons un exemple simple d'objet rempli de valeurs CMJN: C = 50, M = 20, Y = 100 et K = 30, respectivement..

Ensuite, nous demandons à l'utilisateur de saisir une valeur pour Décalage en dégradé. Notons cette valeur par gShift, et l'utilisateur a entré 10 pour gShift.

Une fois que nous avons le gShift valeur, nous allons créer deux arrêts de gradient pour notre objet. Le premier arrêt, c’est-à-dire le plus léger; toutes les valeurs CMJN seront décrémentées par gShift. Alors que le dernier arrêt, c’est-à-dire le plus sombre, toutes les valeurs CMJN seront incrémentées de gShift.

De cette façon, un dégradé de foncé à clair sera généré à partir de la couleur de remplissage réelle. Nous effectuerons également des validations pour contraindre les valeurs CMJN entre 0 et 100, car l’ajout ou la soustraction d’un gShift valeur peut déplacer les valeurs CMJN au-delà de 0 ou 100.

Angle de dégradé: Bien que cela ne fasse pas partie de la logique de base, nous utiliserons cette fonctionnalité pour fournir une certaine accessibilité et la liberté de choisir un angle personnalisé pour le dégradé résultant. L'utilisation de l'angle de gradient sera vu dans la dernière étape de ce tutoriel.

Revenons au code et récupérons les données de l'utilisateur.

Étape 6

Pour récupérer les données utilisateur, entrez les lignes de code suivantes dans le champ si (totalSélectionné> 0) bloc:

if (totalSelected> 0) var gShift = Math.round (prompt ("Entrez une valeur pour le décalage progressif", "10", "Décalage progressif")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) ghift = 100; var gradAngle = invite ("Angle de vecteur du dégradé", "0.0", "Angle du dégradé") if (gradAngle == null) gradAngle = 0;  //fin si

Dans les lignes de code ci-dessus, nous invitons l’utilisateur à entrer une valeur pour le décalage et l’angle du dégradé. le Math.round () La fonction arrondit la valeur entrée en un nombre entier. (Remarque: vous pouvez ignorer Math.round () si vous souhaitez que les valeurs décimales soient acceptées.) Les valeurs par défaut pour gShift et gradAngle sont réglés à "10" et "0.0" respectivement.

Notez que nous validons également les valeurs entrées pour null et zéro. Null est rencontré lorsqu'un utilisateur clique sur le bouton Annuler. En outre, nous limitons la gShift valeur entre 0 et 100.

Une fois que nous avons le gShift et gradAngle les valeurs, nous pouvons aller de l'avant pour le reste du code.

Étape 7 - Travailler sur les objets sélectionnés

Juste après le gradAngle déclaration, entrez les lignes de code suivantes:

 pour (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] renvoie l'objet sélectionné un par un pour chaque itération de j.

Pour chaque objet sélectionné, nous effectuons des validations et des contrôles. Ces contrôles sont cruciaux à ce stade. La première vérification consiste à déterminer si l'objet est un élément composé ou un élément de groupe. Comme ce script ne fonctionnera pas directement sur des groupes ou des objets composés, cette vérification est obligatoire.

Au niveau suivant, nous vérifions si l'objet sélectionné est déjà un dégradé, un motif ou une couleur d'accompagnement. Si oui, ces objets seront ignorés.

Il y a encore une vérification pour la spécification grayColor. GrayColor est légèrement différent de la spécification de couleur CMYK.

Une technique détaillée est utilisée pour traiter des objets avec la spécification grayColor, ce que je n’inclue pas à ce stade du didacticiel. Cependant, cette technique est incluse dans les fichiers source pour votre intérêt..

Étape 8 - Choisissez et divisez la couleur

Conformément à notre logique et à notre algorithme, nous choisirons la couleur de chaque objet sélectionné et diviserons ses valeurs CMJN en quatre variables différentes, comme indiqué ci-dessous:

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

Remarque: Toutes ces lignes de code doivent entrer dans le bloc "Effectuer une conversion de couleur", comme indiqué à l'étape 7..

pathItem.fillColor renvoie la couleur de remplissage d'un élément de chemin particulier. Dans notre cas, le pathItem est currentObject. Nous utilisons couleur.cyan, color.magenta, Couleur jaune et la couleur noire propriétés pour récupérer les valeurs C, M, Y et K respectivement dans quatre variables différentes. Une fois ces valeurs définies, nous pouvons facilement les compenser avec gShift.

Étape 9 - Déclarer les couleurs pour les rampes à gradient

Notre gradient résultant aura deux arrêts de gradient. Notons les avec startColor et endColor. La déclaration de variable pour ces deux couleurs de rampe sera la suivante:

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

le CMJNCouleur est une spécification de couleur CMJN utilisée pour les objets de couleur. Ici le startColor et endColor sont déclarés comme nouvelles couleurs CMJN.

Étape 10 - Décalage de startColor et endColor

À ce stade, nous disposons de toutes les ressources nécessaires pour créer un nouveau dégradé. On a couleur courante (avec des valeurs CMJN séparées), startColor, endColor et gShift. Nous pouvons maintenant définir les valeurs de couleur finales pour startColor et endColor en utilisant la technique offset.

Étape 10.1 - Définition de la couleur de début

le startColor sera la partie la plus claire du dégradé. Par conséquent, nous allons soustraire gShift à partir des valeurs C, M, Y et K de couleur courante, résultant en startColor.

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

C'est simple, mais nous devons effectuer certaines vérifications. Par exemple, que se passera-t-il si le currentCyan est déjà inférieur à gShift? Dire, currentCyan est 10 et gShift est 20. La valeur cyan résultante pour startColor deviendra 10-20 = (-) 10. Pour résoudre ce problème, nous allons modifier l'ensemble de code ci-dessus dans les lignes de code suivantes:

 si (courantCyan < 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;

Étape 10.2 - Définition de la couleur de fond

le endColor sera la partie la plus sombre du dégradé. Par conséquent, nous allons ajouter gShift aux valeurs C, M, Y et K ou couleur courante respectivement. Après simple addition, le code devrait ressembler à ceci:

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

Encore une fois, tout va bien. Mais il y a une complication: que se passera-t-il si l'ajout de gShift résulte en une valeur supérieure à 100? Par exemple, currentCyan est 95 et gShift est 20. En ajoutant ces deux, vous obtiendrez endColor.cyan = 115; ce qui n'est pas acceptable. Nous allons donc compenser cela avec quelques validations.

Créons une nouvelle variable gShiftEnd, qui est égal à 100 gshift. Ensuite, nous vérifierons si la valeur actuelle de C, M, Y ou K est supérieure à gShiftEnd. Si tel est le cas, nous allons définir la valeur C, M, Y ou K de endColor sur 100; sinon nous allons définir la valeur C, M, Y ou K de endColor en ajoutant gShift à l'actuel C, M, Y ou K. Cela peut être élaboré à partir de l'exemple que nous venons de voir ci-dessus.

Nous avons currentCyan = 95 et gShift = 20. Par conséquent, gShiftEnd = 100 - 20. c’est-à-dire 80. Ensuite, currentCyan est supérieur à gShiftEnd; nous allons donc définir endColor.cyan à 100.

Suivant ce principe, notre code sera modifié comme suit:

 gShiftEnd = 100-gShift; if (currentCyan> gShiftEnd) endColor.cyan = 100; sinon 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;

Donc, jusqu'ici, le code complet ressemblera à ceci:

if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("L'espace couleur du document n'est pas CMYK. Changez le mode couleur du document en mode CMJN", "Document CMJN requis");  // end main if if alert ("Aucun document n'est disponible ou le document est vide");  function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (prompt ("Entrez une valeur pour le décalage progressif", "10", "Décalage progressif")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) ghift = 100; var gradAngle = invite ("Angle de vecteur du dégradé", "0.0", "Angle du dégradé") if (gradAngle == null) gradAngle = 0; pour (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; sinon 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; // Bloc de déclaration de dégradé // endif else alert ("Remplit un objet avec une couleur CMJN. Tous les objets contenant des dégradés, des motifs, des couleurs d'accompagnement ou des remplissages vides seront omis.", "Uniquement les couleurs CMJN autorisées");  else alert ("Ce script ne fonctionne qu'avec les objets non composés ou les éléments d'un groupe isolé. \ nTous les éléments comportant des groupes ou des objets composés seront omis.", "Dissocier ou isoler les éléments du groupe");  // endfor // end selected else alert ("Veuillez sélectionner au moins un objet"); 

Étape 11 - Création du nouveau dégradé

Maintenant que nous avons défini le startColor et endColor; on peut procéder à la création du nouveau dégradé.

Étape 11.1 - Déclarer le dégradé

Pour ajouter un nouveau dégradé, insérez les lignes de code suivantes dans "// Bloc de déclaration de dégradé".

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

Cela ajoutera un nouveau dégradé de type linéaire au document actif en cours..

Étape 11.2 - Définition des propriétés du dégradé nouvellement créé

Ajoutez les lignes de code suivantes juste après la déclaration du dégradé:

 // Modifier le premier dégradé stop newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Modifier le dernier dégradé stop newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor;

gradientStop [0] est le premier arrêt de gradient, alors que, gradientStop [1] est le dernier arrêt du dégradé. Si vous souhaitez avoir plus d’arrêts de dégradé, vous pouvez les désigner par gradientStop [2], gradientStop [3] etc.

point de rampe est utilisé pour définir la position du point de rampe du gradientStop associé. Nous avons défini le premier et le dernier point de rampe à 0 et 100 respectivement. point milieu est utilisé pour définir la position du milieu entre deux arrêts de dégradé. Nous avons fixé cette valeur à 50. Enfin, nous avons attribué les valeurs de startColor et endColor respectivement vers le premier et le dernier gradStops.

Étape 12 - Créer un objet de couleur de dégradé

Nous en avons presque terminé avec la conversion des couleurs et la formation de dégradés. Ensuite, nous devons appliquer ce dégradé nouvellement créé à l'objet actuellement sélectionné. Pour ce faire, nous allons créer un objet de couleur de dégradé faisant référence au nouveau dégradé créé..

Remarque: nous ne pouvons pas appliquer directement le dégradé nouvellement créé en tant que couleur de remplissage à l'objet. Pour utiliser ce dégradé, nous devrons créer un nouvel objet Couleur du dégradé, comme indiqué ci-dessous:

 // construit un objet Illustrator.GradientColor en référence au // nouveau dégradé créé var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient;

Étape 13 - Appliquer le dégradé

Enfin, nous allons remplir le currentObject avec le colorOfGradient, comme indiqué ci-dessous:

 // obtenir l'élément de chemin actuel, appliquer le nouveau dégradé comme remplissage. currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);

Nous avons appliqué une matrice de rotation à l'objet actuel. Cette matrice de rotation utilise l'angle du dégradé pour transformer le dégradé. La syntaxe de rotation est la suivante:


tourner
(angle
[, changePositions]
[, changeFillPatterns]
[, changeFillGradients]
[, changeStrokePattern]
[, rotationAbout])

Ici, nous avons mis changeFillgradients à "vrai" et le reste à "faux". C'est un moyen difficile de faire pivoter la couleur du dégradé selon un angle particulier. Merci à John Wundes de m'avoir suggéré cette technique intelligente.

Étape 14 - Le script final

Le script final après le codage complet est présenté ci-dessous:

 if (app.documents.length> 0 && app.activeDocument.pathItems.length> 0) if (app.activeDocument.documentColorSpace == DocumentColorSpace.CMYK) convertToGrad ();  else alert ("L'espace couleur du document n'est pas CMYK. Changez le mode couleur du document en mode CMJN", "Document CMJN requis");  // end main if if alert ("Aucun document n'est disponible ou le document est vide");  function convertToGrad () var items = selection; var totalSelected = items.length; if (totalSelected> 0) var gShift = Math.round (prompt ("Entrez une valeur pour le décalage progressif", "10", "Décalage progressif")); if (gShift == null || gShift <=0) gShift=0; if(gShift >= 100) ghift = 100; var gradAngle = invite ("Angle de vecteur du dégradé", "0.0", "Angle du dégradé") if (gradAngle == null) gradAngle = 0; pour (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; sinon 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; // Créer un nouveau dégradé // Un nouveau dégradé a toujours 2 arrêts var newGradient = app.activeDocument.gradients.add (); newGradient.type = GradientType.LINEAR; // Modifier le premier dégradé stop newGradient.gradientStops [0] .rampPoint = 0; newGradient.gradientStops [0] .midPoint = 50; newGradient.gradientStops [0] .color = startColor; // Modifier le dernier dégradé stop newGradient.gradientStops [1] .rampPoint = 100; newGradient.gradientStops [1] .color = endColor; // construit un objet Illustrator.GradientColor en référence au // nouveau dégradé créé var colorOfGradient = new GradientColor (); colorOfGradient.gradient = newGradient; // obtenir l'élément de chemin actuel, appliquer le nouveau dégradé comme remplissage. currentObject.fillColor = colorOfGradient; currentObject.rotate (gradAngle, false, false, true, false, Transformation.CENTER);  // endif else alert ("Remplit un objet avec une couleur CMJN. Tous les objets contenant \ n dégradés, motifs, couleurs d'accompagnement ou remplissages vides seront omis.", "Unique