Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Design & Illustration
  2. Scripts
Design

Скрипт для Иллюстратора - Как Преобразовать Однотонный Цвет в Соответствующий Градиент

by
Difficulty:IntermediateLength:LongLanguages:

Russian (Pусский) translation by Andrey Rybin (you can also view the original English article)

Мы все в какой-то мере знакомы с Иллюстратором и его интерфейсом. В нашей ежедневной практике мы используем множество его функций: меню, палитры, плагины и инструменты. Мы используем эти функции в виде пользовательского интерфейса. Через пользовательский интерфейс мы получаем доступ к различным плагинам и скриптам.

Проще, мы можем сами написать скрипт, что бы автоматизировать какой либо процесс или, что бы создать какой либо эффект в Иллюстраторе. Посмотрите этот урок, что бы узнать, как это делать. В этом уроке, мы напишем скрипт в Javascript, который будет выполнять преобразование одноцветной заливки в соответствующий градиент.

Vector Plus (Теперь Tuts+)

Хотите получить доступ к ресурсу с векторными файлами, к файлам для каждого урока, включая этот? Присоединяйтесь к ресурсу Vector Plus всего за 9$ в месяц.

Информация об Уроке

  • Используемые программы: Adobe Illustrator CS3 и ExtendedScript Toolkit
  • Уровень подготовки: Средний
  • Приблизительное время на прохождение урока: от 3 до 4 Часов

Назначение Скрипта

Мы хотим, что бы этот скрипт выполнял простую задачу. Когда пользователь в Иллюстраторе выбирает какие-то объекты с однотонной заливкой в системе CMYK, и запускает Скрипт, заливка объекта меняется на соответствующую градиентную заливку. Градиент на выходе будет напоминать эффект перекрытия в режиме наложения. Результат вы можете видеть ниже.

Таким образом, назначение нашего скрипта менять однотонную CMYK заливку на градиент соответствующего цвета от темного к светлому. Это достаточно простая задача, решение которой будет хорошим примером для того, что бы узнать как писать скрипты для Иллюстратора.

Логика и алгоритм

Понятный алгоритм преобразования цвета в градиент от темного к светлому, можно записать за 5 шагов:

  • Шаг 1: Взять цвет текущего объекта, то есть currentColor (текущий цвет) = цвету выбранного объекта.
  • Шаг 2: Создать новый градиент с двумя узловыми цветами: startColor и endColor.
  • Шаг 3: stratColor = currentColor - gShift  - светлая часть нашего градиента, более светлая чем текущий цвет.
  • Шаг 4: endColor = currentColor + gShift  - более темная часть нашего градиента.
  • Шаг 5: Применить к объекту новый градиент, цвета которого изменяются от startColor до endColor.

Здесь, gShift - количественное значение для сдвига по цвету, которое вводится пользователем. Этот алгоритм легче будет понять, если взглянуть на картинки ниже:

Помимо основного алгоритма, мы будем выполнять проверку различных условий для того, чтобы наш скрипт правильно работал. ,Проверочные условия будут рассматриваться на различных этапах этого урока. Прежде чем приступить к самому уроку, давайте пройдемся по некоторым предварительным материалам.

Введение в Написание Скриптов

Для прохождения урока необходимо быть немного знакомым с написанием скриптов и средой в которой они пишутся. Что бы узнать о среде Illustrator's Scripting Environment, вы можете взглянуть на документацию которая доступна у вас в установочной папке для Иллюстратора: \ Adobe \ Adobe Illustrator CS3 \ Scripting \ Documentation (Прим. переводчика: у вас скорее будет немного другой адрес, проще сделать поиск папки в вашем проводнике. Здесь и далее, названия папок, документации, будут зависеть от версии вашего Иллюстратора, т.е СS3, поменяется, например на CC). Здесь вы найдете документацию с помощью которой вы можете начать работать с JavaScript:

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

Виды Скрпитов

Есть три скриптовых языка, в которых мы можем писать программы для Иллюстратора. Это: AppleScript, JavaScript и VBScript. Так как JavaScript  поддерживается и в Windows и в Mac OS, мы будем писать наш код на JavaScript. Синтаксис и обозначения очень похожи на стандартный JavaScript. Единственное отличие — в расширении. Для Иллюстратора мы будем  давать расширения JavaScript файлам - .jsx, вместо обычного расширения .js.

Необходимые инструменты

Хотя вы можете писать весь код в вашем любимом текстовом редакторе, предпочтительно использовать для этого Adobe ExtendedScript Toolkit. С помощью этого приложения, мы можем запускать, отлаживать, тестировать и проверять как работает наш код в Иллюстраторе.

Замечание: В уроке, мы будем писать аббревиатуру для ExtendedScript Toolkit - ESTK.

Шаг 1

Откройте Adobe ExtendedScript Toolkit и создайте Новый Файл  JavaScript.  Далее, выберите Adobe Illustrator в выпадающем меню в качестве целевого приложения (target application). Это сообщит ESTK, что мы пишем код для конкретного приложения, то есть для Adobe Illustrator.

Шаг 2 - Напишите Фрагмент Простого Кода

В редакторе, напишите следующие строчки  кода:

В этом коде, мы проверяем открыт ли какой либо документ в иллюстраторе. Это делается через обращение

app.documents.length. То есть самый верхний уровень в Adobe Application DOM (DOM от англ. Document Object Model — «объектная модель документа»)) - это объект приложения. Следующий уровень - объект документа, который уже содержит такие объекты как цвета, слои, текст, страницы и так далее. Сохраните этот файл на жесткий диск под названием "test.jsx"/

Шаг 2.1 - Запустите Скрипт

Есть два способа запустить Скрипт:

1. Запустить его из ESTK

Если вы хотите запустить ваш скрипт в ESTK, нажмите кнопку Play, как показано на картинке.

Это автоматически запустит приложение Adobe Illustrator и выдаст предупреждающее сообщение. Вы можете остановить или прекратить выполнение скрипта, нажав кнопку паузы или кнопку  стоп.

2. Запустить из Иллюстратора

Что бы запустить скрипт из Иллюстратора, зайдите в Файл > Сценарии > Другой Сценарий (Command + F12) (File > Scripts > Other Scripts) и найдите только, что созданный вами "test.jsx". После того как вы нажмете Открыть, скрипт запустится.

И так что мы увидели? Предупреждающее сообщение, "No documents available" (нет доступных документов).

Теперь, создайте парочку новых документов в Иллюстраторе и запустите скрипт снова. В этот раз вы увидите сообщение: "Documents are available" (документы доступны).

К этому моменту, мы написали и протестировали небольшой фрагмент кода. Это было сделано в качестве упражнения для разминки, чтобы познакомиться с ESTK и Иллюстратором. Дальше мы начнем работу над нашим скриптом.

Шаг 3 - Структура Кода

Вернемся назад к ESTK и удалим тестовый код, который мы создали на Шаге 2. Теперь, добавьте следующие строки кода в файл "test.jsx":

В этом коде, мы делаем предварительную проверку перед запуском нашей основной функции - converToGrad(). То есть, главная функция будет запускаться только в том случае, если удовлетворяются следующие условия:

  1. Открыт хотя бы один документ, в котором есть хотя бы один объект, так что мы можем с ним работать.
  2. Цветовой схемой документа должна быть CMYK, потому, что алгоритм написан для такой схемы.

Шаг 3.1 - Понимание Сущности DOM

app.documents.length возвращает общее количество документов, открытых в Иллюстраторе.

Объект activeDocument относится к текущему (активному) документу, в котором вы работаете.

pathItems ссылается на все объекты pathItem в документе Иллюстратор. Любой графический элемент, как то прямоугольник, эллипс, многоугольник, линия, нарисованные фигуры и т.д. обозначаются, как pathItem; и совокупность этих pathItem обозначаются, как pathItems. Следовательно, app.activeDocument.pathItems.length будет возвращать количество графических объектов, содержащихся в текущем документе.

Объект documentColorSpace определяет цветовой режим документа. Мы делаем эту проверку потому, что вся логика в этом скрипте будет основываться на цветовом пространстве CMYK.

С основной структурой кода мы закончили. Далее мы пойдем в функцию convertToGrad().

Шаг 4 - Начало Основного Алгоритма

И прежде всего, согласно нашему основному алгоритму, нам необходимо получить общее количество выбранных элементов. Если ни одного объекта не выбрано, скрипт укажет, что надо выбрать хотя бы один объект. Для этого добавьте следующий код в функцию convertToGrad():

var items = selection создает новую переменную items и присваивает ей новое значение. В следующей строке items.length возвращает общее количество выбранных элементов, которое присваивается переменной  totalSelected.

Шаг 5 - Доступ к Данным Введенным Пользователем

Что бы преобразовать цвет в градиент, мы запрашиваем у пользователя некоторые величины для Gradient Shift (сдвига) и Gradien Angel (Угол Градиента). Но перед этим, давайте разберемся, что это за значения, и как и на что они влияют.

Сдвиг Градиента: Это числовое значение, на которое мы увеличиваем или уменьшаем текущий цвет. Это ключевой момент нашего алгоритма, что бы изменить однотонный цвет на градиентный.

Как Градиентный Сдвиг работает? Что бы понять, как это работает, рассмотрим простой пример объекта с заливкой в цветовом пространстве CMYK со следующими величинами: C=50, M=20, Y=100 и K=30 соответственно.

Далее, мы просим пользователя ввести значение для Градиентного Сдвига. Обозначим эту величину как gShift, и пользователь вводит 10 для gShift.

После того, как мы получили значение gShift, мы можем создать два узла градиента для нашего объекта. Первый узел - более светлый. Для него все величины CMYK уменьшаться на величину gShift. В то время как, второй узел - более темный. Для него все величины CMYK увеличатся на величину gShift.

Таким образом, градиент от темного к светлому, получается из цвета текущей заливки. Мы также выполним проверку, что бы величины для CMYK лежали в пределах от 0 до 100, так как прибавление или вычитание величины gShift, может вывести величины CMYK за пределы 0 - 100.

Угол градиента: Хотя это не является частью главного алгоритма, мы используем эту функцию для предоставления дополнительной возможности изменить угол полученного градиента. Использование угла градиента будет рассматриваться в в этом уроке позже.

Давайте вернемся к нашему коду и добавим запрос пользовательских данных.

Шаг 6

Что бы запросить данные пользователя, запишите следующие сроки в эту if(totalSelected >0)  часть кода:

В строках кода выше, мы просим пользователя ввести величины для градиентного сдвига и угла градиента. Функция Math.round() округляет введенные величины до целого числа. (Примечание: Вы можете не использовать Math.round(), если хотите разрешить использовать десятичные числа). Значения по умолчанию для gShift и gradAngle установлены "10" и "0.0" соответственно.

Заметьте, что мы так же проверяем будет ли значение переменной null или ноль. Значение переменной Null - присваивается, когда пользователь нажал Отмена. Так же мы ограничиваем значение переменной gShift диапазоном от 0 до 100.

Раз у нас есть значения для переменных gShift и gradAngle, мы можем перейти к остальной части кода.

Шаг 7 - Работа с Выделенными Объектами

Сразу же после объявления gradAngle введите следующие строки кода:

app.activeDocument.selection[j] возвращает выбранные объекты по одному для каждой итерации j.

Для каждого выбранного объекта мы делаем ряд проверок. Эти проверки имеют большое значение на данном этапе. Первая проверка, чтобы определить, является ли объект составным контуром или сгруппированным. Поскольку этот скрипт не будет работать с группами или составными контурами, то эта проверка является обязательной.

На следующем уровне мы проверяем имеет ли выбранный объект градиентную заливку или паттерн, или залит плашечным цветом. Если это так, эти объекты будут пропущены при обработке.

И еще одна проверка на градацию серого. Цветовая схема Градаций Серого, отличается от схемы CMYK.

В программу добавлен код, который исправляет, ситуацию, когда у объекта заливка в Градациях Серого. Я не включил описание этого в урок, но в файле с кодом, эта часть есть, так что вы можете ее посмотреть.

Шаг 8 - Берем Цвет и Разбиваем

Согласно логике нашего алгоритма, мы должны взять цвет для каждого выбранного объекта и разделить его CMYK значение на четыре переменные, как показано ниже:

Примечание: Все эти строки кода включаются в блок  "Perform color conversion"(«Выполняем преобразование цветов»), как показано в Шаге 7.

pathItem.fillColor возвращает цвет заливки элемента конкретного контура. В нашем случае элемент pathItem — currentObject. Мы используем color.cyan, color.magenta, color.yellow и color.black свойства, чтобы извлечь значения C, M, Y и K, соответственно, для четырех различных переменных. Как только назначим значения для этих переменных, мы легко можем изменить их на величину gShift.

Шаг 9 - Объявление Переменных Цвета для Узлов Градиента

Наш градиент будет иметь два узла. Давайте обозначим их как startColor и endColor. Объявление переменных для этих двух цветовых узлов показано ниже:

CMYKColor — это спецификация цвета CMYK, используемая для цветных объектов. Здесь startColor и endColor объявляются как новые  CMYK цвета.

Шаг 10 - Присваиваем Измененные Значения Переменным startColor и endColor

На данном этапе у нас есть все необходимое для создания нового градиента. У нас есть currentColor (с отдельными значениями CMYK), startColor, endColor и gShift. Теперь мы можем присвоить  значения для startColor и endColor, сместив значения на заданную величину.

Шаг 10.1 - Устанавливаем значение для startColor

StartColor будет светлая часть градиента. Следовательно, мы вычтем gShift от значений C, M, Y и K для currentColor, что даст нам startColor.

Это просто, но мы должны кое-что проверить. Например, что произойдет, если currentCyan уже меньше, чем gShift? Скажем, currentCyan 10 и gShift 20. Тогда значение голубого для startColor станет 10-20 = (-) 10. Для исключить такую ошибку, мы изменим написанный выше код следующим образом:

Шаг 10.2 - Устанавливаем значение для endColor

EndColor -темня часть градиента. Следовательно, мы будем добавлять gShift  к значениям C, M, Y и K для currentColor соответственно. После незначительного добавления, наш код будет выглядеть следующим образом:

Еще раз, вроде бы все хорошо. Но есть одна сложность. Что произойдет, если добавление gShitf, приведет к значениям выше чем 100? Например, currentCyan - 95 и gShift -20. Сложение этих двух величин приведет к endColor.cyan = 115, что будет ошибкой. Поэтому делаем проверку на такое событие.

Давайте создадим новую переменную gShiftEnd, которая равна 100-gShift. Далее, мы будем проверять, будут ли текущие значения C, M, Y и K больше чем gShiftEnd. Если это так, то мы присвоим значениям  C,M,Y или K для endColor's величину 100. Если нет, то мы присвоим значения просто добавив величину gShift к текущим значениям C, M, Y и К. Это можно разобрать на примере, который мы только что рассматривали.

У нас есть currentCyan = 95 и gShift = 20. Поэтому gShiftEnd = 100 – 20, то есть 80. Далее currentCyan больше чем gShiftEnd; Поэтому мы установим endColor.cyan 100.

В соответствии с этим, наш код преобразуется в следующий:

И тогда, к этому моменту, наш код должен выглядеть следующим образом:

Шаг 11 - Задаем Новый Градиент

Теперь, когда мы установили  значения для startColor и endColor; мы можем перейти с созданию нового градиента.

Шаг 11.11 - Объявляем Переменную Градиента

Чтобы добавить новый градиент, вставьте следующие строки кода в блок "//Gradient Declaration Block".

Это добавит новый Линейны Градиент в текущий активный документ.

Шаг 11.2 - Устанавливаем Свойства для Созданного Градиента

Добавьте следующие строки кода после объявления градиента:

gradientStop [0] - первый градиентный узел, в то время как, gradientStop [1] - второй градиентный узел. Если вы хотите, что бы у вас было больше градиентных узлов,  их можно обозначать как gradientStop [2], gradientStop [3] и так далее.

rampPoint используется для  задания положения градиентного узла gradientStop. Мы установили положения для первого и последнего узлов 0 и 100, соответственно. midpoint используется для задания положения средней точки между двумя узлами градиента (средняя точка цветовых узлов). Мы установили это значение 50. Наконец, мы присвоили значения startColor и endColor первому и последнему узлам gradientStops соответственно.

Шаг 12 - Создание Объекта с Градиентной Заливкой

Мы почти закончили с преобразованием цвета и образованием градиентной заливки. Теперь мы должны применить созданный нами градиент к выбранному объекту. Что бы сделать это мы создадим объект Gradient Color, привязав его к созданному нами градиенту.

Примечание: Мы не можем непосредственно применить созданный градиент к нашему объекту, как цвет заливки. Что бы сделать это мы должны создать новый объект Gradient Color, как показано ниже:

Шаг 13 - Применяем Градиент

Наконец, мы сделаем заливку для currentObject применив colorOfGradient, как показано ниже:

Мы применили матрицу вращения к текущему объекту. Эта матрица вращения использует угол градиента, что бы преобразовать градиент. Синтаксис для функции вращения следующий:


rotate
angle
[, changePositions]
[, changeFillPatterns]
[, changeFillGradients]
[, changeStrokePattern]
[, rotateAbout])

Здесь, мы должны установить значение для changeFillgradients - "true" и для остальных аргументов на "false". Это хитрый способ для поворота градиента на заданный угол. Спасибо John Wundes, что он поделился со мной  этой интересной техникой.

Шаг 14 - Окончательный Результат

Окончательный вариант нашего скрипта выглядит следующим образом:

Шаг 15 - Запускаем Скрипт

Сохраните скрипт и создайте новый документ в Adobe Illustrator. Далее, создайте несколько новых объектов в цветовом режиме CMYK. Выберите несколько из этих объектов и запустите скрипт, как было описано в Шаге 2.1.

Выскочит окно с просьбой ввести значение для Градиентного Сдвига. Введите какое-нибудь значение для gShift.

Теперь, вас попросят задать угол для градиента. Введите какую-то величину для gradAngle.

И наконец, вы увидите результат, как показано ниже:

Заключение и Область Применения

Мы научились писать скрипты, что бы автоматизировать или создавать новые эффекты. Приведенный в уроке пример - простая демонстрация того, что мы можем делать с помощью скриптов. В этом примере мы узнали как представлен цвет CMYК, как с ним работать, и как ведут себя объекты в DOМ Иллюстратора. В следующей части мы рассмотрим скрипт, который преобразует градиентную заливку в однотонный цвет CMYK. Надеюсь, вам понравился эта вводный урок по написанию скриптов.

Подписывайтесь на RSS рассылку Vectortuts+, что бы быть в курсе последних статей и тьюториалов.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.