Как использовать скрипты в фотошопе

Запись действий в Photoshop CS6 и CC в скрипт

Скрипты в Photoshop не только предоставляют возможность автоматизировать повторяющиеся действия, но и позволяют записывать события, производимые в Фотошопе пользователем, в скрипт! Это очень полезно, когда не знаешь, как прописать в программном коде то или иное действие.

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

Для того, чтобы Photoshop записывал свои действия, следует в папку C:\Program Files\Adobe\Adobe Photoshop CS6\Plug-ins или C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Plug-ins для 64-х битного Фотошопа поместить файл ScriptListener.8li. В более ранних версиях программы этот файл размещался в директории Files\Adobe\Adobe Photoshop CS5\Scripting\Utilities, а для CS6 его придётся скачать на официальном сайте программы или по ссылкам внизу этой страницы.

Как использовать скрипты в фотошопе. zapis deystviy vp cs6 v skript. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-zapis deystviy vp cs6 v skript. картинка Как использовать скрипты в фотошопе. картинка zapis deystviy vp cs6 v skript

Я пользуюсь JavaScript, поэтому далее буду рассматривать второй вариант.

Итак, перед записью событий откройте файл ScriptingListenerJS.log в любом текстовом редакторе, удалите все имеющиеся в нём записи и сохраните его. Затем произведите нужные действия в Photoshop`е.

Теперь открываю файл ScriptingListenerJS.log и вижу следующий код:

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

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

Либо открыть редактор Adobe ExtendScript Toolkit CS6, инсталлирующийся при установке Photoshop CS6, выбрать в левом верхнем углу «Adobe Photoshop CS6», затем нажать на кнопку «Start running the script» (зелёный треугольник).

В любом случае, Фотошоп воспроизведёт действия, которые я только что записал.

Смотрите видео по материалам статьи:

Скачать файлы ScriptListener.8li для Photocsop CS6 и CC для Win32 и win64:

Источник

Обрабатываем картинки средствами Photoshop и ExtendScript Toolkit

Нам понадобится

Теория

У Photoshop-а есть COM API, в котором покрыты многие из фотошоповских функций. Его, разумеется, можно использовать из JS- или VBS-скриптов. Adobe любезно предоставила разработчикам свою IDE, с автокопмлитом и брейкпоинтами. Поддерживаемые языки в ней JScript, VBScript (Win) и AppleScript (Mac). Я остановился на JScript, потому как большинству будет лучше всего понятен именно он.

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

Скриптовый язык

Т.к. ExtendScript кроссплатформенный, пути к файлам представляются как /d/Temp/…

Живой пример

#target photoshop
app.bringToFront(); // запускаем Photoshop. Если он уже запущен, подключимся именно к нему, не к новому инстансу.
var Constants = < /* определим кое-какие константы */ >
ProcessDir(Constants.InputDir, Constants.OutputDir);
function ProcessDir(dir, outDir) <
var folder = Folder(dir); // Adobe-овский объект
var files = folder.getFiles(Constants.FileMask); // Внимание, две маски через запятую (*.jpg,*.png) уже не работают.
var outFolder = Folder(outDir);
if (!outFolder.exists) <
if (!outFolder.create()) <
alert( «Cannot create output folder» );
return ; // может и не получиться
>
>
var totalFiles = 0;
for ( var fileNum in files) <
var outFile = GetOutputFileName(files[fileNum], outFolder.fullName); // куда писать результат
AddLogoToFile(files[fileNum], outFile); // собственно, сама обработка
totalFiles++;
>
alert(totalFiles + » files processed» ); // увидит юзер в Photoshop-е в конце обработки
>
function AddLogoToFile(file, outputFile) <
var photoFile = File(file); // Так открываются файлы, строчку open не понимает
var logoFile = File(Constants.AddLogo.LogoPath);

app.open(logoFile); // открываем лого
app.activeDocument.artLayers[ «Text» ].copy(); // ArtLayers – слои в файле. Этот слой назывался «Text»
var logoWidth = app.activeDocument.width. as ( «px» );
var logoHeight = app.activeDocument.height. as ( «px» );
app.activeDocument.close();

app.open(photoFile); // открываем фотку

var width = app.activeDocument.width. as ( «px» );
var height = app.activeDocument.height. as ( «px» );

var logoLayer = app.activeDocument.artLayers.add(); // добавляем на фотку новый слой, куда поместим лого
logoLayer.name = «Logo» ; // название нового слоя

app.activeDocument.paste(); // вставляем лого из clipboard

var minImageDimension = Math.min(width, height); // масштабируем лого, чтобы оно было в 5 раз меньше минимального размера фотки
var logoScaleMultiplier = minImageDimension / 5 / logoWidth * 100;
app.activeDocument.selection.resize(logoScaleMultiplier, logoScaleMultiplier, AnchorPosition.BOTTOMRIGHT); // обратите внимание на последний аргумент

app.activeDocument.artLayers[ «Logo» ].opacity = 75; // делаем слой полупрозрачным
app.activeDocument.artLayers[ «Logo» ].blendMode = BlendMode.LUMINOSITY; // устанавливаем режим смешивания, чтобы выглядело симпатичнее
// а вот тут бы установить blending options! Об этом читайте дальше.
SaveFile(outputFile); // сохранит и закроет файл
>

Скрипт готов. Осталось сделать лого в формате PSD – такое, чтобы внутри был слой Text, на котором и должно быть размещено лого.
Пример того, что получится:
Как использовать скрипты в фотошопе. f83f77c0. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-f83f77c0. картинка Как использовать скрипты в фотошопе. картинка f83f77c0
Полностью скрипт вылолжил на pastebin.

О грустном

Немного о недокументированном API

var idsetd = charIDToTypeID( «setd» );
var desc15 = new ActionDescriptor();
var idnull = charIDToTypeID( «null» );
var ref6 = new ActionReference();
var idPrpr = charIDToTypeID( «Prpr» );
var idLefx = charIDToTypeID( «Lefx» );
ref6.putProperty( idPrpr, idLefx );
var idLyr = charIDToTypeID( «Lyr » );
var idOrdn = charIDToTypeID( «Ordn» );
var idTrgt = charIDToTypeID( «Trgt» );
ref6.putEnumerated( idLyr, idOrdn, idTrgt );
desc15.putReference( idnull, ref6 );
var idT = charIDToTypeID( «T » );
var desc16 = new ActionDescriptor();
var idScl = charIDToTypeID( «Scl » );
var idPrc = charIDToTypeID( «#Prc» );
desc16.putUnitDouble( idScl, idPrc, 100.000000 );
var idDrSh = charIDToTypeID( «DrSh» );
var desc17 = new ActionDescriptor();
var idenab = charIDToTypeID( «enab» );
desc17.putBoolean( idenab, true );
var idMd = charIDToTypeID( «Md » );
var idBlnM = charIDToTypeID( «BlnM» );
var idMltp = charIDToTypeID( «Mltp» );
desc17.putEnumerated( idMd, idBlnM, idMltp );
var idClr = charIDToTypeID( «Clr » );
var desc18 = new ActionDescriptor();
var idRd = charIDToTypeID( «Rd » );
desc18.putDouble( idRd, 0.000000 );
var idGrn = charIDToTypeID( «Grn » );
desc18.putDouble( idGrn, 0.000000 );
var idBl = charIDToTypeID( «Bl » );
desc18.putDouble( idBl, 0.000000 );
var idRGBC = charIDToTypeID( «RGBC» );
desc17.putObject( idClr, idRGBC, desc18 );
var idOpct = charIDToTypeID( «Opct» );
var idPrc = charIDToTypeID( «#Prc» );
desc17.putUnitDouble( idOpct, idPrc, 75.000000 );
var iduglg = charIDToTypeID( «uglg» );
desc17.putBoolean( iduglg, true );
var idlagl = charIDToTypeID( «lagl» );
var idAng = charIDToTypeID( «#Ang» );
desc17.putUnitDouble( idlagl, idAng, 120.000000 );
var idDstn = charIDToTypeID( «Dstn» );
var idPxl = charIDToTypeID( «#Pxl» );
desc17.putUnitDouble( idDstn, idPxl, 5.000000 );
var idCkmt = charIDToTypeID( «Ckmt» );
var idPxl = charIDToTypeID( «#Pxl» );
desc17.putUnitDouble( idCkmt, idPxl, 0.000000 );
var idblur = charIDToTypeID( «blur» );
var idPxl = charIDToTypeID( «#Pxl» );
desc17.putUnitDouble( idblur, idPxl, 5.000000 );
var idNose = charIDToTypeID( «Nose» );
var idPrc = charIDToTypeID( «#Prc» );
desc17.putUnitDouble( idNose, idPrc, 0.000000 );
var idAntA = charIDToTypeID( «AntA» );
desc17.putBoolean( idAntA, false );
var idTrnS = charIDToTypeID( «TrnS» );
var desc19 = new ActionDescriptor();
var idNm = charIDToTypeID( «Nm » );
desc19.putString( idNm, «Linear» );
var idShpC = charIDToTypeID( «ShpC» );
desc17.putObject( idTrnS, idShpC, desc19 );
var idlayerConceals = stringIDToTypeID( «layerConceals» );
desc17.putBoolean( idlayerConceals, true );
var idDrSh = charIDToTypeID( «DrSh» );
desc16.putObject( idDrSh, idDrSh, desc17 );
var idLefx = charIDToTypeID( «Lefx» );
desc15.putObject( idT, idLefx, desc16 );
executeAction( idsetd, desc15, DialogModes.NO );

Как вы думаете, что делает этот код? Он добавляет тень (Drop Shadow) к слою, это видно по название «DrSh». Я подозреваю, что внутри Photoshop-а прямо так и называются контролы в GUI.
Но, выполнив этот код, обнаружим, что он работает.
Можно найти, что executeAction может как показать диалог пользователю, так и сделать свою работу молча (это определяет последний параметр). Сами ID-шники нигде не описаны, о них (как и о том, что будет с ними в CS6) мы можем только гадать.
Тем не менее, фича логгирования действий довольно интересная, если очень надо, можно по-быстрому накидать скриптик для себя.

Ещё скрипты

Интересные факты

Выводы

API вкусное, очень вкусное. Но отсутствие поддержки blending options сильно удручает; если они нужны – будьте готовы к тому, что придётся возиться со страшным кодом. Если всё, что вам надо (что как раз и надо в большинстве случаев от пакетной обработки) – обвести картинку рамочкой, думаю, ImageMagick в этом случае будет быстрее и намного удобнее.

Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loaderфильтры, гистограммы
Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loaderRAW
Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loadercolor profiles, как в Photoshop-е
Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loaderjavascript – удобный, понятный почти всем язык
Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loaderдокументация с примерами
Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loaderотсутствие blending options
Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loaderдля работы нужен Photoshop /* внезапно */
Как использовать скрипты в фотошопе. image loader. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-image loader. картинка Как использовать скрипты в фотошопе. картинка image loaderработает довольно медленно

Почитать

Adobe Photoshop Scripting – официальный ресурс
Scripting Photoshop – небольшой, но полезный тьюториал по скрпитингу в Photoshop
PS-Scripts – форум о скриптах для Photoshop

Источник

Кирпичики скриптов для Photoshop часть 1

Основные настройки документа.

preferences.rulerUnits = Units.MM; //сделать размер документа в единицах изренения
preferences.typeUnits = TypeUnits.MM; //задать для шрфиов единицу измерения

function GetDocumentBitsPerChannel()<
var Bits =0;
if (app.activeDocument.bitsPerChannel == BitsPerChannelType.ONE) Bits = 1;
if (app.activeDocument.bitsPerChannel == BitsPerChannelType.EIGHT) Bits = 8;
if (app.activeDocument.bitsPerChannel == BitsPerChannelType.SIXTEEN) Bits = 16;
if (app.activeDocument.bitsPerChannel == BitsPerChannelType.THIRTYTWO) Bits = 32;
return Bits;
>

Функция GetDocumentBitsPerChannel() возвращает значения битности документа.

Определить есть ли открытый документ.

if (app.documents.length == 0) <
alert(» нет открытого документа «)
>
else <
alert (» Выполнение основного кода «)
>

Окно ввода значений

var myInput = prompt(» Введите значение: «, » Значение по умолчанию «);
alert(» Введено значение » + myInput);

Окно для ввода значения переменной

Определение есть ли активное выделение в документе.

var GetSelect = 1;
try
catch (a) ;
if (GetSelect==0 ) <
alert (» Выделения нет «);
>
else <
alert (» Выделение есть «);
>

Окно сообщения с подтверждением действия ДА НЕТ.

var myResult = confirm(« Документ не сохранен. Сохранить его сейчас? «)
if (myResult == true) <
alert(» нажато ДА «)
>
else <
alert(» Нажато НЕТ «)
>

Выбрать слой по имени слоя

var D01 = new ActionDescriptor();
var R01 = new ActionReference();
R01.putName( 1283027488, » имя слоя » );
D01.putReference( 1853189228, R01 );
D01.putEnumerated( stringIDToTypeID( «selectionModifier» ), stringIDToTypeID( «selectionModifierType» ), stringIDToTypeID( «addToSelection» ) );
executeAction( 1936483188, D01, DialogModes.NO );

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

получим размеры слоя:

значения ширины и высоты находятся в переменных width и height соответственно

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

Источник

Погружаемся в скриптинг
для Фотошопа

Как использовать скрипты в фотошопе. 1* F1uAW 1Cak19Fz3ZKesaA. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-1* F1uAW 1Cak19Fz3ZKesaA. картинка Как использовать скрипты в фотошопе. картинка 1* F1uAW 1Cak19Fz3ZKesaA

Писать скрипты для Фотошопа, зачастую, нудно и больно (привет многочисленным багам и индийским разработчикам). Но бывает увлекательно и полезно. А если вы знакомы с JavaScript, то и достаточно легко.

Подготовка

Вам понадобится программа Adobe ExtendScript Toolkit, ваш Фотошоп и немного усердия.

После установки запускаем ExtendScript Toolkit и в левом-верхнем углу меняем “ExtendScript Toolkit CC” из выпадающего меню на Фотошоп. Делаем это для того, что бы по нажатию зелёной стрелочки наш скрипт запускался в Фотошопе.

Как использовать скрипты в фотошопе. 1*7mw7J4dnZXOk6Y1dXTH8Kg. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-1*7mw7J4dnZXOk6Y1dXTH8Kg. картинка Как использовать скрипты в фотошопе. картинка 1*7mw7J4dnZXOk6Y1dXTH8Kg

Не будем вникать в объектную модель Фотошопа и прочие сложные термины, про которые вы сможете прочитать в официальной документации (даже с картинками). Ссылки есть в конце поста.

Работа с активным слоем

Чаще всего мы хотим что-либо сделать с активным слоем. Для этого необходимо обратиться к Фотошопу ( app), затем к активному документу ( activeDocument) и, наконец, к нашему слою ( activeLayer).

У слоя есть свойства и методы (выполняемые действия), как и у остальных объектов (документов, каналов, текста, векторных шейпов, …).

Например, что бы узнать имя слоя — нужно обратиться к свойству name.

А что бы переименовать слой:

Скрыть или показать слой — свойство visible.

Подвигать содержимое слоя по холсту — метод translate.

А так же можно узнавать границы содержимого ( bounds), изменять прозрачность слоя ( opacity) и заливки ( fillOpacity), дублировать ( duplicate), масштабировать ( resize) и так далее.

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

Усложняем задачу

Допустим, у нас есть документ с текстовым слоем (в нём что-то написано).

Что бы сходу окунуться с головой в скриптинг, напишем код, который будет узнавать шрифт, размер, интерлиньяж и цвет написанного текста и вставлять их в имя слоя. Какому-нибудь верстальщику будет приятно.

После выполнения такого скрипта имя нашего слоя превратится в нечто подобное:

ArialMT, 14 pt, #000000

Или ничего не произойдёт, так как мы можем встретиться с нашим первым багом Фотошопа. ☺

Дело в том, что если создать новый текстовый слой и не изменять ему цвет, а оставить дефолтный чёрный (#000000), то по какой-то причине Фотошоп не может получить это значение. Подобный баг далеко не единственный, но, зачастую, они побеждаются довольно легко — при помощи javascript-конструкции “try…catch”. Данная синтаксическая конструкция пытается выполнить кусок кода прописанный в try, а если возникает ошибка — выполняет кусок кода из catch.

Итак, фиксим возможную ошибку с определением цвета:

Теперь наш код точно сработает.

Это уже что-то похожее на нужный результат, но мы пойдём дальше и добавим ещё немного магии.

Ниже финальная версия скрипта в которой я предлагаю вам разобраться самостоятельно.

В итоге, имя нашего слоя превратится в нечто похожее:

Arial Bold Italic 30px/40px #333000
или
PT Sans 18px #ff0000

Про запуск скриптов и назначение их на горячие клавиши повторять не буду. Лучше почитайте в статье Сергея Пехтерева.

Полезные материалы

P. S. Не обращайте внимание на даты материалов, так как возможность написания скриптов в Фотошопе появилась ещё в версии CS2 (2005 год) и с тех пор ничего не изменилось. Во всех версиях, с CS2 до сегодняшней, код работает одинаково.

Источник

Основы скриптов в Photoshop на примере выравнивания тона изображений товара

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

В Photoshop для автоматизации работы существует ещё один, гораздо более продвинутый инструмент — язык программирования JavaScript. Для работы вам потребуется немного освоить скриптинг для автоматизации некоторых задач и избавления от рутины. Это ни в коем случае не программирование, не бойтесь. Для освоения вам потребуется лишь минимум Photoshop CS2 и максимум желания прокачать свои скилы.

Писать код мы будем в программе ExtendScript Toolkit, которая поставляется вместе с Photoshop, и большинство нормальных моушн-дизайнеров давно осведомлены об этой и ещё паре программ для написания кода. Я практик, поэтому и реализовывать скрипт будем под реальную задачу, которая передо мной стояли на работе.

Задача: в любых интернет-магазинах есть картинки товара, в крупных магазинах товар исчисляется десятками тысяч. Обычно сидят 2-3 девочки-ретушера и обрабатывают фотографии товара: обтравливают, добавляют белый фон, увеличивают контраст, добавляют отражения, ретушируют обложки… но упускают из вида очень важный момент – разная насыщенность, разный контраст, разный цветовой баланс отдельных изображений. Посмотрите на картинку ниже. Обложки явно отличаются по контрасту, цвету… если вывести средние тона, то корни проблемы бросаются в глаза.

Как использовать скрипты в фотошопе. 647471. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-647471. картинка Как использовать скрипты в фотошопе. картинка 647471

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

Начнем издалека. Что же такое JavaScript в Photoshop?
Я выбрал JS как язык для скриптования в продуктах Adobe, потому что он работает и на Windows, и на MAC. Если вы ярый приверженец винды, то используйте бейсик, если вы неукротимый фанат Мака, то AppleScript в помощь. А я за универсальность.

Основы:
DOM. Это та изнанка программы, которая дает нам возможность получат доступ к различным компонентам Photoshop через язык программирования. Это иерархическое представление Photoshop, каждой его части и возможности, включая работу с открытыми изображениями. Все то, что вы можете сделать мышкой, вы сможете сделать и скриптом. Например, если вы хотите получить доступ к прозрачности слоя, необходимо пройтись по пути Application> Document> Layer> Opacity, а код будет такой

Все довольно логично, например Layer Comp class отвечает за управление просмотром нескольких версий макета в одном файле, что в общем то и делает оригинальный инструмент Photoshop.

Важно понять, что подразумевается под объектами. Сам Photoshop это объект, текст это объект, направляющие это объект, каждый канал RGB является объектом. Все, что кликается мышкой — объекты. Допустим, вы создали новый документ, а с точки зрения программы вы создали новый объект.
Как использовать скрипты в фотошопе. scheme. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-scheme. картинка Как использовать скрипты в фотошопе. картинка scheme
Основы программирования объяснять я не стану, слишком много людей с ними знакомы. Если вы не знакомы, то найдете необходимую информацию везде, начиная c Google play и заканчивая форумами школьников. Для затравки, откройте ExtendScript Toolkit и напишите: alert(«My first Hello Hell!» + app.version); Запустите через редактор скриптов, обрадуйтесь своему первому успешно скомпилированному приложению. Скрипты для Adobe Photoshop имеют расширение jsx.

Вводная информация:
Переменные обозначаются как var borderWidth = 10
var — переменная. А borderWidth — имя переменной (как думаете, что оно означает?).
Затем переменной нужно присвоить значение: = 10

В заголовке скрипта иногда имеет смысл писать строчку #target photoshop, которая будет указывать, что данный скрипт только для Photoshop.

Активный объект
Когда Вы работает в Photoshop, Вы можете рисовать только на слое, который активен в данный момент. Для скриптов тоже важно, какой объект выбран, т.к. скрипты тоже могут и будут рисовать. Ниже приведен пример создания документа и выбор слоя активным:

var doc_nmb_1 = documents.add(500, 500) var doc_nmb_2 = documents.add(500, 500) //Установим Document 1 как активный документ activeDocument = doc_nmb_1 //Сделаем Document 2 активным activeDocument = doc_nmb_2 //Добавим слоев к документам var layer1 = doc_nmb_2.artLayers.add() var layer2 = doc_nmb_2.artLayers.add() //Сделаем 1-ой слой документа 2 активным. ActiveLayer отвечает за чтение и запись выбранного слоя. doc_nmb_2.ActiveLayer = layer1 //Делаем 2-ой слой документа 2 активным doc_nmb_2.ActiveLayer = layer2

Создание нового документа происходит благодаря следующему коду, создаются квадратные изображения в размерах 72 и 144.

var docRef = app.documents.add(72, 72) var otherDocRef = app.documents.add (144,144)

Как видите, читать такой код не так уж и трудно. Перейдем к написанию скрипта. Первое, что мы должны сделать, это вникнуть в задачу и разработать action для применения к нужным изображениям. Сделав это, начинаем писать скрипт.

Главная фишка: конструкция If Else, которая и позволяет добавлять условия, которых не хватает в action. Уверен, многие уже, увидев зарплаты программистов, пытались освоить программирование и if else наверняка писали, поэтому по основам мы просто пробежимся:

if(!content) content =”404”;

Мы проверяем, есть ли у переменной content значение, и если его нет, то присваиваем значение 404. Можно расписать и более сложную обработку, например:

С If мы разобрались, а что же делает else? В конструкции else мы указываем, что выполнять в том случае, если в if значение будет false.

Учитывая это, мы уже может написать необходимый код с событийностью:

Как вы видите, если изображение равняется по высоте 2480px, то просто выскакивает ругающееся на дизайнера окошко. Если изображение вертикальное, то применяется определенная группа экшенов для подготовки контента, если горизонтальная, то другая группа экшенов.

Какие ещё возможности можно добавить в скрипт, или могли бы быть просто интересны?
Создание нового документа нужного формат делается довольно просто:

var docRef = app.documents.add(297, 210, 300, «A4_gorizontal», NewDocumentMode.LAB, DocumentFill.BACKGROUNDCOLOR, 1)

Расшифруем конструкцию: (width, height, resolution, name, mode, initialFill, pixelAspectRatio)
В данном случае в конце можно добавить bitsPerChannel и colorProfileName, но думаю, для начала нам хватит и имеющейся конструкции. Единицы измерения по умолчанию пиксели, давайте поменяем. Меняем на миллиметры:

Мы же не хотим сидеть около монитора и тыкать Enter? Мы хотим быстренько перекинуть все таски в баг-трекере на программиста! Давайте не дадим Photoshop’у возможность о чем либо сообщать и ждать нажатия ОК, делается это так:

Далее копирайты внутри файла. Мы должны добавить информацию о том, что файл сделан нами а не начальником. Добавим метаданные в File info.

docInfoRef = docRef.info docInfoRef.copyrighted = CopyrightedType.COPYRIGHTEDWORK docInfoRef.ownerUrl = «http://www.your-scorpion.ru» docRef.info.author = «Your-scorpion» docRef.info.country = «Russia»

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

Итоговый работающий код:

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

Как использовать скрипты в фотошопе. 64747. Как использовать скрипты в фотошопе фото. Как использовать скрипты в фотошопе-64747. картинка Как использовать скрипты в фотошопе. картинка 64747

Небольшая жизненная мудрость: мы можем записать действия пользователя в файл скрипта.
1. Берем файл «ScriptListener.8li» с сайта Adobe и закидываем в %ProgramFiles%Adobe\Adobe Photoshop CS5\Plug-ins\Automate\
2. Запускаем Photoshop
3. Делаем необходимые действия.
4. На рабочем столе забираем файлики ScriptListener.jsx и ScriptListener.vbs
5. (!)Удаляем ScriptListener.8li!
И мы получаем работающий говно-код, который никому нельзя показывать, но можно использовать в своих технических интересах.

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

function deleteDocumentAncestorsMetadata() < whatApp = String(app.name); if(whatApp.search("Photoshop") >0) < if(!documents.length) < alert("There are no open documents. Please open a file to run this script.") return; >if (ExternalObject.AdobeXMPScript == undefined) ExternalObject.AdobeXMPScript = new ExternalObject(«lib:AdobeXMPScript»); var xmp = new XMPMeta( activeDocument.xmpMetadata.rawData); xmp.deleteProperty(XMPConst.NS_PHOTOSHOP, «DocumentAncestors»); app.activeDocument.xmpMetadata.rawData = xmp.serialize(); > > deleteDocumentAncestorsMetadata();

Либо попробуйте оригинальный скрипт для удаления история работы над SmartObject.

Скрипты не только экономят ваше время, но и не дают вам совершить ошибку с названиями, параметрами и прочими важными вещами. Удачи!

15 комментариев

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

Итак, есть 1500 постеров от фильмов. И есть 5 разных форматов для телефонов, планшетов, телевизор и т.п. Там они могут быть и квадратные, и вытянутые… разные. Так вот эти постеры нужно как то кадрировать и подгонять под эти форматы.
Подскажешь, как лучше решить такую задачу?

Всех секретов я раскрывать не буду, трудовой договор не позволяет) Я бы на вашем месте действовал так:
Допустим, нужны постеры размером 1000x600px.

1. сначала нужно создать папку со всеми исходными картинками. Копируешь код скрипта в файл формата jsx, в коде увидишь размер картинки в пикселях, 500 на 500px. Меняешь на 1000x600px, сохраняешь, и запускаешь через file-script. Картинка ужмется/отмаштабируется до размеров 1000px.

doc = app.activeDocument; doc.changeMode(ChangeMode.RGB); // тут менять размер var fWidth = 500; var fHeight = 500; if (doc.height > doc.width) < doc.resizeImage(null,UnitValue(fHeight,"px"),null,ResampleMethod.BICUBIC); >else < doc.resizeImage(UnitValue(fWidth,"px"),null,null,ResampleMethod.BICUBIC); >// а тут настройки сохранения var options = new ExportOptionsSaveForWeb(); options.quality = 70; options.format = SaveDocumentType.JPEG; options.optimized = true; var newName = ‘web-‘+doc.name+’.jpg’; doc.exportDocument(File(doc.path+’/’+newName),ExportType.SAVEFORWEB,options);

2. Скрипт подгоняет и сразу сохраняет все картинки, поэтому не забудь сделать бэкапы фоток (параметры сохранения в скрипте тоже есть и редактируются). После того, как скрипт отработает, делаешь фотошопский экшен, который приведет картинку к пропорциям 100% на 60%. (через image —> canvas).

Либо:
1) взять инструмент Crop tool, установить у него в опциях нужные пропорции
2) закинуть несколько файлов в фотошоп и сразу их обрезать в нужном соотношение, часть фото все равно пришлось бы в ручную переделывать после скрипта.
3) и сохранять, сохранять, сохранять.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *