Работа с цветом. Часть 1. CMYK, RGB, Grayscale и None

Для того, чтобы научится эффективно управлять (создавать/изменять/удалять) цветовыми значениями векторных объектов в Adobe Illustrator с помощью скриптов, необходимо для начала, хорошо представлять как устроена работа с цветом в пользовательском интерфейсе Illustrator. Понимание этих основ избавит от нелепых и грубых ошибок при работе с цветом в ваших скриптах.

Цвет в пользовательском интерфейсе Illustrator

Любой документ, созданный или открытый в Adobe Illustrator, представлен в одном из двух цветовых режимов: CMYK или RGB.

color in GUI Illustrator

Однако, для графических объектов самого документа возможно назначение и изменение цвета с помощью других цветовых моделей. Контекстное меню палитры Color позволяет выбрать один из возможных вариантов цветовых моделей.

color in GUI Illustrator

Кроме этих вариантов, есть еще возможность задавать значения цвета в цветовой модели Lab. В чем можно убедиться, посмотрев параметры раздела Color Mode любого образца из палитры Swatches.

color in GUI Illustrator

Ну и конечно, еще есть плашечные цвета – Spot Color, которые тоже можно создавать и изменять с помощью палитры Swatches.

Важно понимать, что Swatches (Образцы) представляют из себя варианты заполнения объекта не только одним локальным цветом, но и более сложными заливками, такими как градиенты и паттерны. Поэтому Swatches нужно рассматривать как заполнение объекта цветовым содержимым, а не как образец одного конкретного цвета. Для swatches в скриптовой модели Illustrator есть свои специальные классы (javascript-объекты), которые позволяют работать именно с ними.

Цвет с точки зрения скриптовой модели Illustrator

Если посмотреть на цвет из скриптового (программного) интерфейса, то мы увидим следующую картину. Здесь имеется объект Color, который представляет собой абстрактный родительский класс для всех цветовых классов, используемых в Illustrator.

Объект Color не имеет никаких свойств и методов, зато содержит подклассы. Ниже показан скриншот из документации.

color script model

Именно с помощью этих подклассов объекта Color можно определить и назначить любой цвет векторному объекту в Adobe Illustrator. Рассмотрим все эти классы (объекты javascript).

CMYKColor

Нижеследующий код из документации Adobe по скриптингу показывает как установить сиреневый цвет для заливки самого верхнего объекта pathItem в активном документе Illustrator.

// Sets the fill color of the frontmost path item in
// the current document to a light purple CMYK color
if (app.documents.length > 0 && app.activeDocument.pathItems.length > 0) {
  frontPath = app.activeDocument.pathItems[0];
  // Set color values for the CMYK object
  newCMYKColor = new CMYKColor();
  newCMYKColor.black = 0;
  newCMYKColor.cyan = 30.4;
  newCMYKColor.magenta = 32;
  newCMYKColor.yellow = 0;
  // Use the color object in the path item
  frontPath.filled = true;
  frontPath.fillColor = newCMYKColor;
}

Пример, демонстрирующий работу скрипта.

color script model

Для начала разберемся, что делает следующая строка:

newCMYKColor = new CMYKColor();

Выражение new CMYKColor() создает новый объект CMYKColor со свойствами cyan, magenta, yellow и black, а в переменной newCMYKColor сохраняется ссылка на созданный объект.

color script model

Ссылка (или reference) — это указатель на определенный объект javascript.

По умолчанию, всем свойствам объектa CMYKColor присваивается значение 0. Это несложно проверить, добавив сразу после данной строки следующий проверочный код и запустив скрипт снова.

alert('cyan: ' + newCMYKColor.cyan);
alert('magenta: ' + newCMYKColor.magenta);
alert('yellow: ' + newCMYKColor.yellow);
alert('black: ' + newCMYKColor.black);

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

В следующих строках кода задаются значения свойств объекта CMYKColor в диапазоне от 0 до 100.

newCMYKColor.black = 0;
newCMYKColor.cyan = 30.4;
newCMYKColor.magenta = 32;
newCMYKColor.yellow = 0;

Свойствам black и yellow можно было бы не задавать значения (не писать эти строки), так как при инициализации объекта CMYKColor им уже было присвоено значение по умолчанию, равное 0. Но для лучшей читаемости кода, эти строки желательно оставить.

Теперь, когда создан объект CMYKColor и заданы значения его свойств (цветовых значений модели CMYK), нужно назначить (применить) его к векторному объекту Illustrator. Ранее в коде была создана ссылка на самый верхний объект pathItem и сохранена в переменной frontPath.

frontPath = app.activeDocument.pathItems[0];

В следующих строках цвет заливки применяется к этому объекту.

frontPath.filled = true;
frontPath.fillColor = newCMYKColor;

В первой строке свойству filled задается значение true, во втoрой строке свойству fillColor – значение переменной newCMYKColor, в которой содержится ссылка на объект CMYKColor с определенными значениями цветов CMYK.

Если пропустить первую строку, то объекту все равно будет применена заливка, но лучше ее оставить, следуя примеру разработчиков Adobe.

Схематично это можно представить так.

color script model

Теперь вы знаете, как с помощью скрипта задать цвет векторному CMYK-объекту. Остается только добавить, что переменным frontPath и newCMYKColor можно давать любые допустимые имена. Главное, чтобы они ясно отражали суть значения переменных.

RGBColor

Ранее, в разделе CMYKColor, мы детально разобрали как работать с классом CMYKColor. RGBColor работает аналогичным образом. Отличие заключается только в том, что у объекта RGBColor другие свойства: red, green, blue вместо cyan, magenta, yellow, black, и другой диапазон числовых значений для них – от 0 до 255. Значения по умолчанию для цветов также равны 0.

Рассмотрим пример из документации. Данный скрипт назначает желтый цвет заливки по умолчанию в текущем документе Illustrator.

// Sets the default fill color in the current document to yellow.
if (app.documents.length > 0) {
  // Define the new color
  var newRGBColor = new RGBColor();
  newRGBColor.red = 255;
  newRGBColor.green = 255;
  newRGBColor.blue = 0;
  app.activeDocument.defaultFillColor = newRGBColor;
}

В результате выполнения скрипта вы получите следующее.

color script model

Данная строка кода создает новый объект RGBColor, со свойствами red, green, blue и сохраняет ссылку на него в переменной newRGBColor.

var newRGBColor = new RGBColor();

color script model

Следующие строки задают значения цветов (свойств объектa RGBColor) в диапазоне от 0 до 255. Сочетание этих цветовых значений определяет желтый цвет.

newRGBColor.red = 255;
newRGBColor.green = 255;
newRGBColor.blue = 0;

Последняя строка назначает цвет по умолчанию – свойство defaultFillColor активного документа activeDocument приложения app определенным цветом из переменной newRGBColor.

app.activeDocument.defaultFillColor = newRGBColor;

color script model

Полезная информация из документации:

Если цветовое пространство документа – RGB, и вы задаете значение цвета для элемента страницы в этом документе, используя CMYK, Illustrator преобразует спецификацию цвета CMYK в спецификацию цвета RGB. То же самое происходит, если цветовое пространство документа – CMYK, и вы задаете цвета, используя RGB. Поскольку этот перевод может потерять информацию, вы должны указать цвета, используя класс, который соответствует фактическому цветовому пространству документа.

GrayColor

Объект GrayColor определяет цветовые значения в модели Grayscale (оттенки серого). Свойство gray объекта GrayColor задает оттенок серого цвета в диапазоне от 0 до 100.

Рассмотрим пример из документации, в котором первому слову текстового объекта в активном документе Illustrator задается серой цвет.

// Sets the color of the first word in the active document
// to a shade of gray
if (app.documents.length > 0 && app.activeDocument.textFrames.length > 0) {
  var text = app.activeDocument.textFrames[0].textRange;
  var firstWord = text.words[0];

  // Create the new color
  var textColor = new GrayColor();
  textColor.gray = 45;
  firstWord.filled = true;
  firstWord.fillColor = textColor;
}

Создайте новый документ, наберите в нем текст Hello World и запустите скрипт. В результате его выполнения, слово Hello окрасится в серый цвет.

color script model

Сначала создается ссылка на все слова текстового объекта и сохраняется в переменной text.

var text = app.activeDocument.textFrames[0].textRange;

Затем создается ссылка на первое слово и сохраняется в переменной firstWord.

var firstWord = text.words[0];

В следующей строке инициализируется объект GrayColor и ссылка на него в переменной textColor.

var textColor = new GrayColor();

color script model

Далее, свойству gray задается значение оттенка серого цвета, равное 45.

textColor.gray = 45;

А в следующих двух строках первому слову в документе (ссылка на который содержится в переменной firstWord) назначается цвет заливки объекта GrayColor, хранящийся в переменной textColor.

firstWord.filled = true;
firstWord.fillColor = textColor;

color script model

В результате, слово Hello перекрашивается в серый цвет.

NoColor

Объект NoColor представляет цвет «None». Назначение его цвету заливки или обводки векторного объекта эквивалентно установке для свойства заливки или обводки значения false.

Рассмотрим пример из документации, в котором создаются два перекрывающихся объекта с разными цветами заливки.

color script model

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

color script model

Код примера следующий:

// Creates 2 overlapping objects with different fill colors.
// Assign the top object a fill color of "NoColor"
// allowing the bottom object to become visible.

// create 2 overlapping objects one blue, one red;
var docRef = documents.add();
var itemRef1 = docRef.pathItems.rectangle(500, 200, 200, 100);
var itemRef2 = docRef.pathItems.rectangle(550, 150, 200, 200);
var rgbColor = new RGBColor();
rgbColor.red = 255;
itemRef2.fillColor = rgbColor;
rgbColor.blue = 255;
rgbColor.red = 0 ;
itemRef1.fillColor = rgbColor;
redraw();

// create a nocolor and assign it to the top object
var noColor = new NoColor();
itemRef2.fillColor = noColor;
redraw();

Здесь нас интересуют только последний блок кода.

// create a nocolor and assign it to the top object
var noColor = new NoColor();
itemRef2.fillColor = noColor;
redraw();

В первой строке создается объект NoColor и сохраняется в переменной noColor.

Во второй строке – заливке fillColor верхнего объекта itemRef2 присваивается значение переменной noColor, тем самым применяя к нему заливку типа none.


СтатьиСледующаяПредыдущая