Как стать автором
Поиск
Написать публикацию
Обновить

Includes в Photoshop

Всем программистам знакома технология include – когда вы включаете в файл другие файлы. Это удобно, т.к. можно поменять что-то в одной часть и это поменяется везде, где эта часть используется. И тут меня посетила страшная мысль: а может ли Photoshop использовать подобную технологию? Например, при создании сайта иметь отдельно файл с шапкой и низом, которые бы использовались в других файлах.

Пример «на пальцах»:

image

Для примера мы делаем 3 файла: top.psd, bottom.psd и index.psd в который нужно их поместить. Первое что приходит на ум – пункт меню File-Place (Файл-Поместить), который создает Smart-объекты. Так и делаем.

image

Помещаем(File-Place) нужные файлы-части(top.psd, bottom.psd) в основной файл(index.psd).
image

Но вот в чем проблема: если что-то изменить в файле top.psd, то в файле index.psd ничего не изменится, Потому-что smart-объект не является ссылкой на файл. Это, скорее, копирование в index.psd. Получается, что top.psd не то же что smart-объект в index.psd[top].

image

Можно, нажав правой кнопкой мыши на Smart-объекте, заменить его на новый (Replace Contents), но это не наш подход. Можно сделать Action Script, который будет заменять созданные слои, но тогда для каждой части придется создавать свой Action Script.

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

Для работы необходимо:


1. Добавить файл скрипта в папку фотошопа:
«С:\Program Files\Adobe\Adobe Photoshop CS4\Presets\Scripts\Update includes.jsx»
2. Поместить все файлы в один каталог
image
3. Создать smart-объекты необходимых частей, назвав их СООТВЕТСТВЕННО ИМЕНАМ ФАЙЛОВ.
image
4. Для обновления – нажать File->Scripts->Update Includes

Листинг скрипта:


// Copyright 2002-2007. Adobe Systems, Incorporated. All rights reserved.
// This script will launch JavaScript debugger.

// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop

// in case we double clicked the file
app.bringToFront();

function replaceSmartLayerContents( file ) {
var desc = new ActionDescriptor();
desc.putPath( charIDToTypeID( "null" ), file);
executeAction( stringIDToTypeID( "placedLayerReplaceContents" ), desc, DialogModes.NO );
};

function main() {
// Создаем указатель на текущий документ
var docRef = app.activeDocument;
// Получаем рабочий каталог текущего файла
var workFolder = app.activeDocument.path;
debugger;
//Проходим по все слоям...
for(i=0;i<docRef.layers.length;i++){
// ...и выбираем smart-объекты
if(docRef.layers[i].kind == LayerKind.SMARTOBJECT){
// Получаем имя файла из имени слоя
var filename = docRef.layers[i].name;
// Открываем файл
var updatefile = File (workFolder+'/'+filename);

//Проверяем наличие файла
if(updatefile.exists)
{
// Выделяем обновляемый слой
docRef.activeLayer = docRef.layers[i];
// Обновляем слой
replaceSmartLayerContents (updatefile);
docRef.activeLayer.name = filename;
}
}
}
};

main();
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.