Куда устанавливать скрипты illustrator

Обновлено: 04.07.2024

Этот пост — продолжение первой части, где был представлен скрипт Expand Clipping Mask и детально описано, что и как он делает, а также попутно рассмотрены основные принципы создания подобных программ в целом. В этой части я продолжу рассказ о том, как добавить в программу новый функционал, чтобы из "заготовки" получить на выходе "готовое изделие". Здесь не обойтись без более глубокого погружения в предметную область, что является одним из необходимых условий создания полноценного продукта. Итак, начинаем погружение!

В качестве контура маски в Adobe Illustrator могут быть использованы следующие графические примитивы: простой контур (Path), составной контур (Compound Path), составная форма (Compound Shape) и текстовые объекты (Point Text и Text on the Path). На данный момент скрипт работает только с простыми контурами, что видно из приведенного ниже кода, где PathItem — это обращение к элементу Path.

Перед этим мы объявили переменную clipPath , но не присваили ей значение.

Это значит, что ее значение пока не определено, т.е. оно undefined . Если сейчас выделить маску, контуром которой будет, скажем, Compound Path и запустить скрипт, то программа выдаст ошибку на последней строчке функциональной части скрипта,

так как условие в цикле не будет выполнено, переменная clipPath так и останется undefined , а применить метод remove() к чему-то неопределенному невозможно. Чтобы не допустить такой ситуации, мы сделаем следующее — присвоим clipPath значение null , которое, в отличии от undefined , уже что-то более определенное, что можно хотя-бы проверить.

Давайте подумаем, как определить, что какой-то Compound Path является контуром нашей маски? Когда я говорю "давайте подумаем", это значит, что я предлагаю заглянуть в документацию и найти нужное нам свойство. По аналогии с PathItem ищем свойство clipping . Оказывается, что у объекта CompoundPathItem нет такого свойства, зато есть свойство pathItems , через которое можно добраться до простых контуров PathItem , у которых свойство clipping имеется.

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

Собственно, изменения коснутся только одной строки. Как мы здесь видим, 'PathItem' поменялся на 'CompoundPathItem', а также добавилась новая конструкция 'pathItems[0]', с помощью который мы обращаемся к элементу составного контура.

Ниже приведен функциональный блок кода, созданный на данный момент.

Следующий на очереди "пациент" — это Compound Shape (составная форма). Вот здесь становиться совсем интересно! В документации мы вообще не находим такого объекта. Что делать? Для начала давайте определим к какому классу объектов он относится. Чтобы выяснить это, напишем небольшой вспомогательный код, который потом выкинем. Как было сказано в первой части, мы не касаемся вопроса используемых инструментов для написания/отладки кода. Поэтому предположим, что это будет отдельный файл, которой потом просто отправится в корзину. Код будет следующим:

Вот ведь засада! — восклицаете в сердцах вы. А мозг лихорадочно работает, в надежде решить нерешаемую задачу. И тогда, перебрав все возможные и невозможные варианты, вы в отчаянии нажимаете Del и удаляете ненавистный Compound Shape. И тут краем глаза на палитре Layers вы замечаете, что после этого действия, контейнер маски, который был Clip Group , стал просто Group . Что бы это могло значит? А то, что свойство clipped объекта-маски из true стало false . Вот оно, решение, которое может сработать! Конечно это, по-большому счету, hack, но какая разница, если он поможет определить искомый контур.

Алгоритм определения контура маски, представленный объектом Compound Shape, тогда будет следующим: перебираем в цикле все объекты маски и, когда обнаруживаем PluginItem, то удаляем его и проверяем изменилось ли свойство clipped у контейнера маски. Если оно стало false , значит это и есть наш контур. Единственное, чтобы этот hack сработал, надо после удаления объекта обновить DOM Illustrator, что можно сделать методом app.redraw() . Потом еще надо не забыть вернуть удаленный объект, что делается методом app.undo() .

Ниже приведен код для контура Compound Shape:

Теперь из всех возможных вариантов типа объектов, которые могут быть контуром маски, остался только текст (или TextFrameItem , в терминологии illustrator scripting references). Снова обращаемся к документации и опять не находим там свойства clipping . Но на этот раз мы уже не переживаем так сильно по этому поводу и спокойно выясняем, что у TextFrameItem есть свойство kind , которое определяет тип текстового объекта ( TextType ). Выясняем, что таких типов может быть три: AREATEXT, POINTTEXT и PATHTEXT. Первый тип нам не интересен, так как его нельзя использовать в качестве контура маски, а другие два еще как интересны. Остается только найти hack, который поможет нам определить теперь уже не контур, а текстовый объект, являющийся контуром маски. И этим hack-ом станет команда, Convert To Area Type, которая конвертирует POINTTEXT в AREATEXT. Как и в случае с Compound Shape, при этом происходит неявное изменение свойства clipped .

Соответственно, код для TextFrameItem типа POINTTEXT будет следующим:

Остался только TextFrameItem типа PATHTEXT. К сожалению, при конвертировании PATHTEXT в AREATEXT, свойство clipped не изменяется. Но так как это последний из возможных претендентов на звание "контур маски", то можно использовать именно такое его поведение. То есть проверяем, что после выполнения команды Convert To Area Type свойство clipped осталось true . Ниже приведен код для TextFrameItem типа PATHTEXT.

Таким образом, если собрать вместе последовательно написанные части кода, включая блок проверок, то мы получим такой код, выполнение которого, как было заявлено еще в первой части поста, будет реализовывать действие новой команды Expand Clipping Mask в Adobe Illustrator.

Здесь можно поставить точку. Нет, лучше точку с запятой.

Надеюсь, этими постами я помог вам стать немного ближе к своей цели — начать программировать в Adobe Illustrator. Спасибо за внимание!

Adobe Illustrator имеет множество инструментов и функций, но продвинутому пользователю всегда будет чего-то не хватать. Поэтому разработчики создают скрипты и плагины, которые помогут решать разнообразные задачи и ускорять трудоемкие процессы. Сегодня мы подготовили для вас обзор лучших бесплатных скриптов для Illustrator. Их список систематизирован и разделен на несколько групп по функциональности. Это работа с путями и точками, различные типы распределения форм, генерирование объектов, работа с панелью Layers, текстовыми объектами, цветом и т.д.

Установка и запуск скриптов

Установить скрипт необходимо в следующие папки:

Для запуска скрипта переходим File > Scripts > …


Вы также можете поместить скрипты в любом другом удобном месте на вашем жестком диске. В этом случае для запуска скрипта переходим File > Scripts > Other Script… (Cmd/Ctrl + F12).

Если вы часто используете скрипты, то для удобного запуска вам пригодится Script Bay plug-in. Этот бесплатный плагин дает доступ к скрипта из панели, которую всегда можно разместить в удобном месте.


Теперь ознакомимся со списком скриптов, которые разделены по функциональности:

Скрипты для работы с путями, точками и ручками

Arc Twister by John Wundes

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

Fleurify by John Wundes

Этот скрипт создает цветочки из обычных фигур. Отлично подходит для создания интересных узоров, логотипов и т.д.


Merge Overlapped Anchors by Hiroyuki Sato


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

Close ALL Paths by Wolfgang Reszel

Скрипт закрывает открытые пути в текущем документе. Не соединяет касающиеся пути.


Path One Direction by Yemz

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


Find and Replace Graphics Transform To Fit by Kelso

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


Скрипты, распределяющие объекты

Circle Fill by Jongware

Скрипт заполняет форму кружочками.


Distribute on the Path by Hiroyuki Sato

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


Dup At Selected Anchors by Hiroyuki Sato

Скрипт дублирует верхний объект и размещает копии в выделенных точках.


Rotate Toward Point by Hiroyuki Sato

Скрипт поворачивает объекты к центру верхнего объекта.


Rotate as Top by Yemz


Скрипт поворачивает все объекты в позицию верхнего объекта.

Object Grouper by Yemz

Скрипт дает возможность разделить площадь векторного объекта в соответствии с данными, которые могут быть представлены в абсолютном или процентном выражении.


Flip by Alex Sheingart

Скрипт создает зеркальное отражение в соответствием с выбранным типом из панели.


Скрипты, генерирующие объекты на основании других объектов или данных

Metaball by Hiroyuki Sato

Скрипт соединяет формы в стиле мета-болл (вы знаете русское название такой формы? я нет).


Common Tangents by Hiroyuki Sato

Скрипт создает общие (все возможные) касательные к выделенным объектам.


Tangents from a Point by Hiroyuki Sato

Скрипт создает направляющие из выделенной точки к выделенным криволинейным сегментам.


QR code by Kazuhiko Arase

Скрипт позволяет генерировать QR код в Иллюстраторе.


Calendar Premaker by VD

С помощью этого скрипта вы можете автоматически создать календарную сетку всего за несколько кликов. Поддерживает языки: EN, RU, DE, UA.


Скрипты со случайным параметром

Random Select by Loic Aigon

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


Random Swatches Fill by Yemz

Скрипт RandomSwatchesFill в случайном порядке окрашивает выделенные объекты в цвета выбранные в палитре Swatches.


Random Opacity by Yemz

Скрипт RandOpacity изменяет прозрачность выделенных объектов в случайном порядке в диапазоне от 0% до 100% от первоначальной прозрачности объектов.


Random Rotate Liner Gradient by Yemz

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


Random Order by Yemz

Скрипт Random Order позволяет распределить объекты в случайном порядке в панели Слои. Я использовал этот скрипт при написании урока по созданию векторной текстуры морского песка и гальки.


Скрипты для работы in the Layers panel

Delete empty layers by Kelso

Скрипт удаляет все пустые слои в текущем документе.


Layer Export by William Ngan

Скрипт автоматически экспортирует каждый слой, как отдельный PNG или PDF файл.


Скрипты для работы с цветом

Replace Color by Alex Sheingart

Скрипт позволяет заменить образцы цвета и обводки на другие образцы.


CMYK to Pantone by John Wundes

Скрипт позволяет подобрать ближайшие Пантоны по цвету в CMYK.


Скрипты для работы с текстовыми объектами

Divide Text Frame by John Wundes

Скрипт Divide Text Frame разделяет многострочные текстовые поля на отдельные объекты текстовых рамок, облегчая задачу разделения списков, предметов навигации и т.д.


Join Text Frames by John Wundes

Этот скрипт соединяет несколько текстовых объектов в один.


Clear transform text and pic by Yemz

Скрипт позволяет возвратить текстовые объекты и растровые изображения к горизонтальному положению. Скрипт удаляет трансформации Scale, Rotate, Shear для растровых объектов и Rotate, Shear для текстовых объектов..


MergeText_AI by Ajar Productions Animation Studios

Скрипт сливает текстовые объекты (включая текст на пути) в один текстовый объект, при этом атрибуты (стили, форматирование) каждой части текста остаются неизменными

Собрал в единую подборку свои скрипты или в написании которых принимал участие. Большинство из них автоматизирует различные операции с объектами. Все скрипты бесплатны для скачивания.

Алфавитный указатель

Скриптов под Иллюстратор в мире написано тысячи и многие доступны бесплатно. Если среди моих авторских нужного под задачу нет, то пишите на почту или в Телеграм. Может подскажу, где найти подходящий.

Установка скриптов

Файл скачанного скрипта копируем в стандартную папку Иллюстратора.
Путь для Мак:
/Applications/Adobe Illustrator [версия]/Presets.localized/en_GB/Scripts
Папка в Виндовс:
C:\Program Files\Adobe\Adobe Illustrator [версия]\Presets\en_GB\Scripts\
После перезапуска Иллюстратора установленные скрипты станут доступны в меню File → Scripts.

Запустить скрипт без установки можно и сразу, выбрав меню File → Scripts → Other Script, тогда Иллюстратор попросит указать расположение файла либо перетащить мышкой файл скрипта на окно Иллюстратора.

Scripshon Trees

Если часто приходится запускать скрипты, то чтобы не открывать постоянно меню, можно установить бесплатное расширение Scripshon Trees. Это панель, выводящая список всех скриптов из указанной папки, при желании в ней настраивается вызов скрипта по горячей клавише.

ArtboardsRotateWithObjects 1.2

Скрипт для поворота монтажной области (artboard) вместе с содержимым. В Фотошопе присутствует стандартный функционал для поворота изображения Image → Image Rotation, но аналога до сих пор нет в Иллюстраторе. Данный скрипт повернёт по желанию артборды в документе с их содержимым на 90 градусов. Автор — Александр Ладыгин, в ходе совместного тестирования мной был дописан интерфейс скрипта.

  • Active Artboard — вращать текущий артборд;
  • All Artboards — повернуть все артборды в документе;
  • 90 CW — по часовой стрелке;
  • 90 CCW — против часовой стрелки.

ConvertToGradient

Скрипт создает градиент из сплошной заливки с указанным числовым смещением каналов для создания цвета крайних точек градиента и углом поворота. Первую версию скрипта написал в 2010 году Саурабх Шарма. Я добавил ряд улучшений:

  • поддержку RGB, CMYK профилей;
  • возможность создать градиент, если объект залит плашечным цветом (Spot) или в градации серого (Gray colors);
  • применение градиента к Compound Path и объектам в группах.

DuplicateArtboards

В Иллюстраторе, чтобы продублировать артборды, нужно выбирать инструмент Artboard Tool и с зажатым Alt несколько раз перетаскивать неизвестно на какое расстояние и считать в уме сколько копий уже сделано. Либо в панели Artboards выбирать артборды и тащить на иконку New Artboard также несколько раз, но получаем все копии в одну строку.

Новому скрипту достаточно указать нужное количество копий и расстояние между ними. На Гитхабе бесплатная Light версия с 2 опциями, если нужно больше возможностей, то покупайте Pro версию на Gumroad. Настройки в Pro версии:

  • Select artboard — список всех артбордов документа;
  • Copies — количество копий выбранного артборда;
  • Columns — количество колонок, включая стартовый артборд. Если ряд заполнился, то следующие копии начнутся с новой строки;
  • Spacing — отступы между копиями;
  • Artboard name — имя копий с набором шаблонов;
  • Insert as last in Artboards list — поместит все копии в конец списка артбордов документа. Иначе копии будут располагаться после оригинала;
  • Copy Artwork with Artboard — копирует артборд со всей графикой на нём, включая заблокированные и скрытые объекты.

Export selection as AI

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

  • Save each object to a separate file — экспортировать каждый объект или группу в отдельный файл;
  • Fit artboard to selected art — масштабировать артборд под размер объекта.

ExtUngroup

Скрипт помогает разгруппировать до отдельных объектов любые многоуровневые группы в документе и заодно удалить все обтравочные маски (Clipping Mask) с объектов.

  • Selected objects — скрипт будет работать только с выделенными объектами;
  • Active layer — разгруппировать только на активном слое;
  • Artboard No. — активный артборд с указанием его номера;
  • All Document — искать группы по всему документу;
  • Ungroup All — разгруппировать всё;
  • Release Clipping Masks — разделить все маски;
  • Remove Masks Shapes — удалить пустые объекты, которые были масками.

FileVersionInformer

Скрипт помогает собрать техническую информацию, в какой версии Иллюстратора сохранены все файлы .Ai, .Eps в указанной папке. Он создает текстовый документ с перечнем имён файлов и номерами версий. Каких-то способов без скрипта узнать эту информацию не найдено. Adobe Bridge показывает различные метаданные файла, но информация о версии им не определяется. Владельцам Маков повезло чуть больше пользователей Виндовс, Finder на Маке может отобразить для одного выбранного векторного файла версию программы.

InlineSVGToAI

С помощью скрипта вставляем SVG код из буфера обмена в виде графики. Например, копируем объект через контекстное меню «Copy as svg» из Фигмы и с помощью скрипта вставляем в Иллюстратор. Cкрипт написан Александром Ладыгиным с небольшим моим вкладом по рефакторингу кода. Если у вас Иллюстратор CC 2018 22.1 или 2019, то скрипт не нужен, так как в них эта функция встроена.

Points Move Random

Скрипт перемещает случайным образом в пределах заданных диапазонов по горизонтали и вертикали выделенные точки или все точки на выделенных объектах. С опцией «Move only points handles» переместятся усы точек, а сами точки останутся на своих координатах. С помощью скрипта можно быстро генерировать абстрактные паттерны, кляксы из кругов, траву, мех.

RenameItems

Скрипт для массового переименования выделенных объектов, групп. Особо полезен для подготовки файлов для анимации в Афтер Эффектс или анимации SVG, т.к. в коде появляются понятные ID у элементов, на которые можно ссылаться. Если в документе ничего не выделено, то скрипт предложит переименовать активный слой.

  • Find and replace — позволяет найти совпадающие символы в именах выделенных объектов и заменить. Этой опцией можно также убирать пробелы;
  • Search string — поле для ввода искомых символов;
  • Auto-increment naming — добавить в конце имени автонумерацию;
  • Name separator — символ, которым будет отделен номер;
  • Start counting at — поле устанавливает с какого числа начать нумерацию.

Rescale

Скрипт трансформирует выбранный объект или группу до нужного размера. В зависимости от введенной ширины или высоты и конечного размера коэффициент рассчитывается автоматически. Если лень смотреть текущий размер, то можно поверх нарисовать прямую линию, тогда скрипт возьмет за основу ее длину, а в конце, по желанию, удалит. Пример использования: имеем развертку упаковки от типографии, с указанными размерами сторон, но развертка в неизвестном масштабе в файле. Зная конечные размеры, мы можем скриптом привести развертку к 100% масштабу.

ResizeToSize

В Иллюстраторе существует встроенная панель Transform, но с её помощью нельзя трансформировать несколько выделенных объектов до заданной величины. Также у неё проблемы с точностью результата, из-за наличия эффектов и обводок могут появляться дробные значения. Скрипт ResizeToSize может трансформировать с 100% точностью несколько объектов, учитывая размер стороны: ширины, высоты или автоматически самой длинной стороны. Удобно когда, например, группу иконок нужно точно вписать в заданный артборд. Единицы измерения берутся из настроек документа.

  • Visible bounds будет считать размер объекта вместе с обводкой и эффектами, Geometric bounds — только габариты самой фигуры;
  • Scaling side — выбор стороны;
  • Reference point — точка, от которой произойдет масштабирование;
  • Additional scale — дополнительные настройки, например, если отключен Uniform, то каждый объект будет сжат по одной стороне.

SelectOnlyPoints

Ситуация: когда мы пытаемся выделить и сдвинуть конкретные точки на объектах с помощью Direct Selection Tool или Lasso tool, часто кроме точек выделяются и сегменты путей. Начинаем двигать и ломается фигура. Приходится заново ювелирно выделять точки. С помощью SelectOnlyPoints мучиться не придется, выделяем область с интересующими нас точками, запускаем скрипт и всё поправлено — остаются активными только точки, попавшие в область выделения.

SelectPointsByType

В Иллюстраторе официально существует два типа точек: Corner (угловая) и Smooth (гладкая). Как быстро выделить точки одного типа? Никак. К тому же визуально из-за положения усов точки (handles) на кривой Безье можно ввести больше типов. Скрипт позволяет быстро выделять 5 видов точек для дальнейших манипуляций. Поддерживается множественный выбор. Чтобы видеть какие точки выделяются, отключите рамку View → Hide Bounding Box.

SplitPath

Во всех версиях Иллюстратора панель Pathfinder работает так: мы можем комбинировать замкнутые объекты различными способами или разрезать объекты с помощью линий. Но до сих пор Адоб не добавила в панель способ разрезать наоборот линии с помощью некой замкнутой фигуры. Скрипт SplitPath сделает это, к тому же можно как вырезать из линии или набора линий лежащую поверх фигуру с помощью метода Minus Front, так и наоборот удалить все куски линий, лежащих за пределами фигуры, методом Intersect.

StrokeColorFromFill

Красит обводку (Stroke) каждого выделенного объекта в цвет его заливки. У объектов с градиентной заливкой обводка красится в усреднённый цвет всего градиента методом интерполяции.

  • Color shift — сдвигает все цветовые каналы при переносе с объекта на обводку. При нуле цвет переносится без изменения;
  • Convert Spot colors — конвертирует плашечный цвет (в палитре такие цвета отмечены белым уголком) в RGB/CMYK;
  • If there is no stroke, add it — если у объекта нет обводки, то добавит толщиной 1 pt. Опция недоступна на Маках с Иллюстратором старше CC 2020.

TrimMasks

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

Если маска покрашена в какой-либо цвет и надо после обрезки её оставить, как объект, то откройте файл скрипта текстовым редактором и замените значение false в строке «SAVE_FILLED_CLIPMASK = false;» на true.

Zoom And Center

Данный скрипт максимально увеличивает выделенные в Adobe Illustrator объекты по центру экрана. Схож по работе со встроенным зумом в Corel Draw. За основу я взял наработку Джона Вундеса. Если ничего не выделено, скрипт используется для максимального масштабирования на экране всего содержимого файла. Это пригодится, чтобы увидеть общую структуру документа или найти пропущенные объекты, которые случайно могли сдвинуть далеко от рабочих артбордов.

  • Visible unlocked — максимально показать на экране видимые незаблокированные объекты;
  • All except hidden — отобразить всё, кроме скрытых объектов;
  • All in document — отмасштабировать экран с учетом всех объектов в документе. Учтите, что данная опция может замедлить выполнения скрипта на файлах с тысячами объектов.

Если не скачивается спасибо блокировкам РКН , то вот запасная ссылка.

В дополнение на Гитхабе доступна ещё одна моя подборка разных небольших скриптов.

Донаты

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

Теоретические аспекты работы со скриптами

Рис. 1. Меню Scripts со встроенными скриптами

Рис. 1. Меню Scripts со встроенными скриптами

Рис. 2. Меню Scripts с серией дополнительных скиптов, оформленных в виде нескольких подменю

Рис. 2. Меню Scripts с серией дополнительных скиптов, оформленных в виде нескольких подменю

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

Скрипты на языке программирования JavaScript представляют собой обычные текстовые файлы с расширением js и потому могут создаваться в любом текстовом редакторе, включая блокнот.

Концепция объектно-ориентированного программирования

Документ, созданный в программе Illustrator, представляет собой некий набор объектов, каждый из которых относится к тому или иному типу (например, является векторным, растровым, символьным и т.д.) и обладает определенными свойствами (шириной границы, цветом заливки и др.). К тому же каждый объект принадлежит некоторому документу, причем находится на его определенном слое и может быть подвергнут некоторым действиям (move, copy, duplicate и пр.).

Полученные довольно длинные конструкции нетрудно сократить. Здесь можно не указывать ненужные в данном конкретном случае составляющие имени (в частности, если в документе всего один слой, то указывать его необязательно). Можно использовать ссылки на имена, вводя для обозначения части конструкции имени, которую придется многократно повторять, сокращенное имя (такие имена в языке программирования называют переменными). Имена лучше присваивать со смыслом, чтобы упростить ориентацию в теле кода. Например, если предварительно ввести конструкцию mypathItems=app.activeDocument.layers[0].pathItems, то рассматриваемый участок кода будет иметь вид mypathItems[0].

До того, как приступать к экспериментам со скриптами, необходимо запомнить несколько правил:

  • в названиях переменных имеет значение регистр (то есть mypathItems и MyPathItems окажутся совершенно разными переменными);
  • номер элемента массива всегда указывается внутри квадратных скобок [];
  • любая конструкции скрипта (такие конструкции называют операторами) заканчивается либо символом «;», либо закрывающейся фигурной скобкой «>». Второй вариант имеет место лишь в тех случаях; когда в данной конструкции уже фигурирует открывающаяся фигурная скобка «
  • количество закрывающихся фигурных скобок полностью совпадает с числом открывающихся;
  • каждую новую конструкцию лучше размещать на новой строке, а конструкции, размещаемые внутри фигурных скобок, лучше печатать со сдвигом по строке (рис. 3). Хотя данные приемы необязательны, но они значительно упрощают ориентацию в созданном скрипте и позволяют контролировать число открывающихся и закрывающихся фигурных скобок.

Рис. 3. Пример скрипта, в котором выделенные строки напечатаны с табуляцией: закрывающиеся скобки стоят прямо под теми операторами, которые они закрывают, и четко прослеживаются

Рис. 3. Пример скрипта, в котором выделенные строки напечатаны с табуляцией: закрывающиеся скобки стоят прямо под теми операторами, которые они закрывают, и четко прослеживаются

Принцип написания и отладки скриптов

Освоение простейших конструкций языка JavaScript

Прежде чем переходить к примерам создания скриптов, которые могут автоматизировать процесс решения тех или иных дизайнерских задач, рассмотрим несколько простых учебных примеров, которые хотя и не имеют особой практической ценности, но помогут нам разобраться в принципах использования наиболее распространенных языковых конструкций. Для этого создайте в блокноте пустой файл debugging.js и сохраните его в папке Presets\Scripts. Далее загрузите программу Illustrator и создайте новый документ, разместив в нем три векторных контура, например три прямоугольника с широкой границей (рис. 4). Обратите внимание на размещение объектов в палитре Layers: находящийся в самом низу слоя объект был создан самым первым, а потому в разнообразных массивах он будет фигурировать под 0-м номером; при движении вверх по палитре Layers номера объектов будут увеличиваться.

Рис. 4. Исходное изображение: все объекты имеют широкие границы

Рис. 4. Исходное изображение: все объекты имеют широкие границы

Введите в файл debugging.js нижеприведенные строки

mypathItems = app.activeDocument.layers[0].pathItems;

mypathItems[0].strokeWidth=2.5;

mypathItems[1].strokeWidth=3.5;

mypathItems[2].strokeWidth=2.5;

и сохраните файл под тем же именем (рис. 5).

Рис. 5. Текст первого скрипта, набранный в Блокноте

Рис. 5. Текст первого скрипта, набранный в Блокноте

Конструкция mypathItems = app.activeDocument.layers[0].pathItems означает создание переменной с именем mypathItems, благодаря которой можно будет сократить обращение ко всем объектам первого слоя активного документа. Строка mypathItems[0].strokeWidth=2.5 говорит о том, что ширина границы (свойство strokeWidth) у самого первого объекта станет равной 2,5 пикселам. Остальные строки идентичны.

Рис. 6. Текст первого скрипта после удаления обращения к слою

Рис. 6. Текст первого скрипта после удаления обращения к слою

for (условие цикла)

тело цикла

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

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

Условие цикла может выглядеть по-разному, но в большинстве случаев оно может быть представлено конструкцией i=0;i<имя_объекта.length;i++, означающей изменение переменной i на одну единицу в сторону увеличения от нуля и до тех пор, пока ее значение не совпадет с числом объектов (length) в активном слое активного документа. Тело цикла ограничено с обеих сторон фигурными скобками и может включать как одну, так и несколько строк (в зависимости от числа выполняемых в цикле действий), каждая из которых оканчивается символом «;».

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

набор действий 1

набор действий 2

Рис. 8. Скрипт для изменения ширины границы только при наличии выделенных объектов

Рис. 8. Скрипт для изменения ширины границы только при наличии выделенных объектов

Рис. 9. Скрипт для изменения ширины границы у выделенных объектов

Рис. 9. Скрипт для изменения ширины границы у выделенных объектов

Примеры создания и использования скриптов

Изменение оформления однотипных объектов

Рис. 12. Документ до размера символьных изображений

Рис. 12. Документ до размера символьных изображений

Рис. 13. Скрипт для уменьшения размера символьных объектов

Рис. 13. Скрипт для уменьшения размера символьных объектов

Рис. 14. Документ после корректировки размера символьных изображений

Рис. 14. Документ после корректировки размера символьных изображений

Скрипты могут использоваться не только для изменения того или иного свойства объектов, но и для полного их оформления, что чаще всего осуществляется наложением графического стиля и тоже может быть автоматизировано. Графические стили (graphicStyles), как и многие другие объекты, объединяются в массивы, и к ним можно обращаться по номерам. Для примера создадим скрипт, который будет накладывать определенный стиль на все векторные объекты, ширина границы которых меньше или равна 1 (на деле принцип проверки изображений зависит от особенностей их создания и может быть самым разным). Пример подобного скрипта приведен на рис. 15.

Рис. 15. Скрипт для наложения графического стиля

Рис. 15. Скрипт для наложения графического стиля

Утолщение слишком тонких границ

Рис. 16. Фрагмент чертежа с наличием слишком тонких контуров

Рис. 16. Фрагмент чертежа с наличием слишком тонких контуров

Рис. 17. Скрипт для изменения ширины границы у слишком тонких контуров

Рис. 17. Скрипт для изменения ширины границы у слишком тонких контуров

Рис. 18. Фрагмент чертежа после увеличения ширины слишком тонких контуров

Рис. 18. Фрагмент чертежа после увеличения ширины слишком тонких контуров

Форматирование текстовых объектов

Рис. 19. Документ до корректировки шрифта

Рис. 19. Документ до корректировки шрифта

Рис. 20. Скрипт для изменения параметров текста

Рис. 20. Скрипт для изменения параметров текста

Рис. 21. Документ после корректировки шрифта скриптом

Рис. 21. Документ после корректировки шрифта скриптом

Выравнивание высоты и ширины объектов

При создании организационных, технологических и иных видов бизнес-диаграмм приходится работать с большим числом идентичных объектов, например обычных прямоугольников, которые различаются размерами в связи с разной длиной размещаемого в них текста (рис. 22). В конечном же счете все указанные элементы нередко должны быть равными по высоте. Выравнивать их вручную, конечно, хлопотно, но данную операцию можно быстро осуществить с помощью скрипта.

Рис. 22. Фрагмент диаграммы до выравнивания по высоте

Рис. 22. Фрагмент диаграммы до выравнивания по высоте

Рис. 23. Создание инструментом Rectangle контрольного объекта с нужной высотой

Рис. 23. Создание инструментом Rectangle контрольного объекта с нужной высотой

Рис. 24. Скрипт для выравнивания высоты всех объектов по высоте контрольного объекта

Рис. 24. Скрипт для выравнивания высоты всех объектов по высоте контрольного объекта

Рис. 25. Фрагмент диаграммы после выравнивания по высоте

Рис. 25. Фрагмент диаграммы после выравнивания по высоте

Встречается и такая ситуация, когда объекты требуется выровнять по ширине, оставляя их высоту неизменной. Автоматизировать процесс тоже поможет скрипт, который можно получить из предыдущего, заменив свойство height (высота) на свойство width (ширина) и отредактировав принцип масштабирования объектов в методе resize (scaleX, scaleY), где в этом случае неизменным должно оставаться значение scaleY (рис. 26).

Рис. 26. Скрипт для выравнивания ширины всех объектов по ширине контрольного объекта

Рис. 26. Скрипт для выравнивания ширины всех объектов по ширине контрольного объекта

Форматирование таблицы

Если приходится регулярно работать с однотипно оформленными объектами, например с таблицами, содержимое которых, как и количество строк, постоянно меняется, но стиль оформления при этом сохраняется, то можно значительно ускорить процесс оформления таблицы, создав соответствующий скрипт. Предположим, что все ячейки таблицы создаются в белом цвете и не имеют границ (рис. 27). При оформлении необходимо залить заголовочные ячейки некоторым цветом (иными словами изменить значение свойства fillColor) и добавить им тонкую границу шириной в 0,5 пикселов, что предполагает изменение свойств strokeColor и strokeWidth.

Рис. 27. Фрагмент таблицы до форматирования

Рис. 27. Фрагмент таблицы до форматирования

Рис. 28. Скрипт для форматирования заголовочных ячеек таблицы

Рис. 28. Скрипт для форматирования заголовочных ячеек таблицы

Рис. 29. Фрагмент таблицы после форматирования

Рис. 29. Фрагмент таблицы после форматирования

Обратите внимание, что в рассматриваемом примере сами ячейки (то есть соответствующие им прямоугольные объекты) присутствовали в документе, поэтому их параметры можно было изменять. Это означает, что при создании таблицы ее ячейки были нарисованы в виде прямоугольных объектов, а затем были скопированы в буфер обмена и продублированы командой Edit=>Paste in Front (Редактировать=>Вставить на передний план). После этого в копии ячеек был вписан текст, сгруппированный вместе с соответствующей ему прямоугольной ячейкой. При другой технологии создания таблицы для ее оформления потребуется совсем иной скрипт.

Экспорт и сохранение открытых документов

Бывает, что после работы с несколькими и даже со многими документами в конце работы их все необходимо сохранить либо экспортировать в нужный формат. Рассмотрим вариант экспорта всех отрытых изображений в формат jpg. При создании скрипта для выполнения данной операции, во-первых, нужно добиться того, чтобы изображения сохранялись с разными именами и в конкретной папке, а во-вторых, следует как-то переключаться с документа на документ при условии, что имена документов произвольны.

Кроме того, закрывать изображения лучше командой doc.close(SaveOptions.DONOTSAVECHANGES), а не doc.close(), поскольку во втором случае при закрытии каждого изображения программа будет требовать соответствующего подтверждения. Скрипт для решения сформулированной проблемы представлен на рис. 30.

Рис. 30. Скрипт для экспорта открытых изображений в формате jpg и их закрытия

Рис. 30. Скрипт для экспорта открытых изображений в формате jpg и их закрытия

Проведение пакетной обработки файлов

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

Рис. 31. Скрипт для сохранения изображений в формате eps

Рис. 31. Скрипт для сохранения изображений в формате eps

Казалось бы, логичнее оформить запуск скрипта в виде второго макроса в созданном наборе действий, но это будет неудобно при дальнейшей обработки файлов. Дело в том, что в пакетном режиме можно запускать только один макрос, поэтому для того, чтобы операция обработки файлов осуществлялась в один прием, дополните макрос Delete Unused Palette Items запуском скрипта и измените имя макроса. Запуск скрипта можно включить в набор при помощи команды Insert Menu Item (Вставить пункт меню) меню палитры Actions, указав в открывшемся окне команду File=>Scripts=>SaveAsEPS (Файл=>Скрипты=>Сохранить как EPS), рис. 32.

Рис. 32. Вид палитры Actions после добавления скрипта

Рис. 32. Вид палитры Actions после добавления скрипта

Читайте также: