Избранное »

22.09.2014 – 07:27 | 2 комментария | 27 160 views

Здравствуйте все, кто работает в Индизайне!
Извещаем вас о том, что на youtube.com работает канал «InDesign Мастерская вёрстки». Там уже размещены более 70 видео с полным описанием как работать с программой DoTextOK. Другие интересные темы, касающиеся работы …

Читать полностью »
Работа в InDesign

Хитрости и секреты, приемы работы, уроки

Новая версия!

Особенности новой версии Индизайна

Плагины

Описание плагинов, информация о плагинах для работы с Adobe InDesign

Скрипты

Готовые к использованию скрипты для Adobe InDesign

Скриптинг

Описание языка, приёмов и методов программирования для Adobe InDesign

Home » Скриптинг

Помещение иллюстраций в вёрстку при помощи скрипта

Добавлено на 27.01.2012 – 12:39Без комментариев | 1 771 views

На днях, делая очередной скрипт, долго ломал голову над какой-то непонятной ошибкой – программа отказывалась помещать картинку в фрейм. И пока докапывался, в чём был просчёт, просматривая другие подобные скрипты, сложилась краткая подборка решений, как инструментами скриптинга работать с картинками.

Помещение картинки в фрейм

Итак, мы хотим поместить картинку в фрейм 185х125 мм. Объявим размеры фрейма:

myFrameWidth = 185;
myFrameHeight =125;

(единица измерения не указывается, программа работает с текущими установками.)

Картинка ‘Закат.jpg’ размещена на диске С\: в каталоге tmp. Вот как надо указать доступ к ней:

myPict = "/c/tmp/Закат.jpg"

(Моя ошибка была в том, что потерялась наклонная черта после первой кавычки. И получил сообщение:

Скрипт искал каталог С\tmp\ в папке «Мои документы»! )
Добавляем документ с выключенной опцией ‘Facing Pages’ формата А4:

app.documentPreferences.facingPages = false;
var myDoc = app.documents.add();
myDoc.documentPreferences.pageSize = "A4";

и для полноты освещения вопроса добавим еще один слой:

myDoc.layers.add();

Добавленный слой стал активным, т.е. с индексом 0. Программа сама присвоила ему имя ‘Layer 2’.
Присвоим имя слою, что был при создании документа. Сейчас индекс этого слоя 1.

myDoc.layers[1].name = "Нижний слой";

В документе по умолчанию всегда есть первая страница, и пусть ссылка на неё будет myPage1.

var myPage1 = myDoc.pages[0];

Поместим на эту страницу прямоугольник

var myPicture = myPage1.rectangles.add();

и определим его габариты. Они определяются парами координат Y и X левого верхнего и правого нижнего углов фрейма.

Ytop = 10;
Xtop = 15;
myPicture.geometricBounds = [Ytop, Xtop, Ytop + myFrameHeight, Xtop + myFrameWidth];

Поместим картинку в этот фрейм

myP = myPicture.place(File(myPict));

подгоним картинку пропорционально под размер фрейма

myPicture.fit (FitOptions.PROPORTIONALLY);
//и ставим её по центру
myPicture.fit(FitOptions.CENTER_CONTENT);

Вот что получилось:

В документе одна страница. Активен второй созданный слой Layer2. В палитре LAYERS этот слой отмечен красным цветом, поэтому контур фрейма с картинкой на этом слое тоже красного цвета. Картинка подогнана под размер фрейма и стоит по центру.

Помещение картинки на странице

Очевидно, что когда мы помещаем картинку в фрейм, он уже размещен на каком-то слое и имеет конкретные координаты. А можно поместить картинку на определенной странице в конкретный слой, и указать её координаты?
Да, можно. Будет создан фрейм с размерами, равными помещаемой картинке.
Добавляем в документ страницу, её имя будет myPage2:

var myPage2 = myDoc.pages.add();

Вот такая запись поместит картинку myPict на страницу myPage2. Координаты X и Y левого верхнего угла в этом примере [15,35] в текущих единицах измерения, и слой указан не индексом, а его именем:

myAnotherPict = myPage2.place(File(myPict),[15,35],myDoc.layers.item("Нижний слой"))[0];

Выделение картинки в фрейме

myAnotherPict — это объект Image. Чтобы добраться до фрейма, надо указать myAnotherPict.parent. Содержимое иллюстрационного фрейма — это первый и единственный объект массива allGraphics[].
Такая строка выделит картинку в фрейме:

myAnotherPict.parent.allGraphics[0].select();

Вот что получилось:

Выбрана вторая страница документа, активен «Нижний слой». Размеры созданного фрейма равны размерам рисунка. Выбран рисунок.

Поворот картинки

Подробную информацию, как в скрипте выполнять масштабирование, поворот и деформацию сдвигом можно найти в документе “Adobe InDesign CS3 Scripting: Working with Transformations in JavaScript”.
Тут только пример, как применить сведения из этой книги к повороту объекта. Объект — это выделенный объект, в нашем случае помещенная в фрейм картинка.
Идея всех таких преобразований — определить матрицу трансформации и опорную точку, относительно которой будет выполняться поворот, масштабирование, сдвиг.
Определим матрицу поворота против часовой стрелки на 45 градусов:

var myRotateMatrix = app.transformationMatrices.add({counterclockwiseRotationAngle:45});

выделенный объект (он указывается как app.selection[0]), поворачивается относительно центральной точки в соответствии с установками матрицы поворота myRotatematrix:

app.selection[0].transform(CoordinateSpaces.pasteboardCoordinates, AnchorPoint.centerAnchor, myRotateMatrix)


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

Вот, собственно, и весь опыт работы с иллюстрациями.
А началось всё с потерянной наклонной черты. : ))

Михаил Иванюшин

Оставить комментарий!

Вы должны быть в системе чтобы оставить комментарий.