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

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

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

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

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

скрипты фотошоп

После добавления файла следует перезапустить программу. После этого произведите любое действие в Photoshop и на Вашем рабочем столе появятся два файла — ScriptingListenerJS.log и ScriptingListenerVB.log. В первом из них события записываются на языке JavaScript, во втором — на Visual Basic Script.

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

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

Для примера, я произвёл следующие действия, кстати, одно из этих действий — сохранение для Web — невозможно автоматизировать и записать с помощью обычных Action:

  • создал новый документ с белым фоном размером 600 на 400 пикселей
  • залил его дефолтным основным цветом — чёрным
  • сохранил для Web в формате JPG с качеством 50% на рабочем столе

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

var idMk = charIDToTypeID ( "Mk  " );
var desc11 = new ActionDescriptor ();
var idNw = charIDToTypeID ( "Nw  " );
var desc12 = new ActionDescriptor ();
var idMd = charIDToTypeID ( "Md  " );
var idRGBM = charIDToTypeID ( "RGBM" );
desc12.putClass ( idMd, idRGBM );
var idWdth = charIDToTypeID ( "Wdth" );
var idRlt = charIDToTypeID ( "#Rlt" );
desc12.putUnitDouble ( idWdth, idRlt, 600.000000 );
var idHght = charIDToTypeID ( "Hght" );
var idRlt = charIDToTypeID ( "#Rlt" );
desc12.putUnitDouble ( idHght, idRlt, 400.000000 );
var idRslt = charIDToTypeID ( "Rslt" );
var idRsl = charIDToTypeID ( "#Rsl" );
desc12.putUnitDouble ( idRslt, idRsl, 72.000000 );
var idpixelScaleFactor = stringIDToTypeID ( "pixelScaleFactor" );
desc12.putDouble ( idpixelScaleFactor, 1.000000 );
var idFl = charIDToTypeID ( "Fl  " );
var idFl = charIDToTypeID ( "Fl  " );
var idWht = charIDToTypeID ( "Wht " );
desc12.putEnumerated ( idFl, idFl, idWht );
var idDpth = charIDToTypeID ( "Dpth" );
desc12.putInteger ( idDpth, 8 );
var idprofile = stringIDToTypeID ( "profile" );
desc12.putString ( idprofile, """Adobe RGB  (1998)""" );
var idDcmn = charIDToTypeID ( "Dcmn" );
desc11.putObject ( idNw, idDcmn, desc12 );
executeAction ( idMk, desc11, DialogModes.NO );

var idFl = charIDToTypeID ( "Fl  " );
var desc13 = new ActionDescriptor ();
var idUsng = charIDToTypeID ( "Usng" );
var idFlCn = charIDToTypeID ( "FlCn" );
var idFrgC = charIDToTypeID ( "FrgC" );
desc13.putEnumerated ( idUsng, idFlCn, idFrgC );
var idOpct = charIDToTypeID ( "Opct" );
var idPrc = charIDToTypeID ( "#Prc" );
desc13.putUnitDouble ( idOpct, idPrc, 100.000000 );
var idMd = charIDToTypeID ( "Md  " );
var idBlnM = charIDToTypeID ( "BlnM" );
var idNrml = charIDToTypeID ( "Nrml" );
desc13.putEnumerated ( idMd, idBlnM, idNrml );
executeAction ( idFl, desc13, DialogModes.NO );

var idExpr = charIDToTypeID ( "Expr" );
var desc14 = new ActionDescriptor ();
var idUsng = charIDToTypeID ( "Usng" );
var desc15 = new ActionDescriptor ();
var idOp = charIDToTypeID ( "Op  " );
var idSWOp = charIDToTypeID ( "SWOp" );
var idOpSa = charIDToTypeID ( "OpSa" );
desc15.putEnumerated ( idOp, idSWOp, idOpSa );
var idDIDr = charIDToTypeID ( "DIDr" );
desc15.putBoolean ( idDIDr, true );
var idIn = charIDToTypeID ( "In  " );
desc15.putPath ( idIn, new File ( "C:\Users\Exellent\Desktop" ) );
var idFmt = charIDToTypeID ( "Fmt " );
var idIRFm = charIDToTypeID ( "IRFm" );
var idJPEG = charIDToTypeID ( "JPEG" );
desc15.putEnumerated ( idFmt, idIRFm, idJPEG );
var idIntr = charIDToTypeID ( "Intr" );
desc15.putBoolean ( idIntr, false );
var idQlty = charIDToTypeID ( "Qlty" );
desc15.putInteger ( idQlty, 50 );
var idQChS = charIDToTypeID ( "QChS" );
desc15.putInteger ( idQChS, 0 );
var idQCUI = charIDToTypeID ( "QCUI" );
desc15.putInteger ( idQCUI, 0 );
var idQChT = charIDToTypeID ( "QChT" );
desc15.putBoolean ( idQChT, false );
var idQChV = charIDToTypeID ( "QChV" );
desc15.putBoolean ( idQChV, false );
var idOptm = charIDToTypeID ( "Optm" );
desc15.putBoolean ( idOptm, true );
var idPass = charIDToTypeID ( "Pass" );
desc15.putInteger ( idPass, 1 );
var idblur = charIDToTypeID ( "blur" );
desc15.putDouble ( idblur, 0.000000 );
var idEICC = charIDToTypeID ( "EICC" );
desc15.putBoolean ( idEICC, false );
var idMtt = charIDToTypeID ( "Mtt " );
desc15.putBoolean ( idMtt, true );
var idMttR = charIDToTypeID ( "MttR" );
desc15.putInteger ( idMttR, 255 );
var idMttG = charIDToTypeID ( "MttG" );
desc15.putInteger ( idMttG, 255 );
var idMttB = charIDToTypeID ( "MttB" );
desc15.putInteger ( idMttB, 255 );
var idSHTM = charIDToTypeID ( "SHTM" );
desc15.putBoolean ( idSHTM, false );
var idSImg = charIDToTypeID ( "SImg" );
desc15.putBoolean ( idSImg, true );
var idSWsl = charIDToTypeID ( "SWsl" );
var idSTsl = charIDToTypeID ( "STsl" );
var idSLAl = charIDToTypeID ( "SLAl" );
desc15.putEnumerated ( idSWsl, idSTsl, idSLAl );
var idSWch = charIDToTypeID ( "SWch" );
var idSTch = charIDToTypeID ( "STch" );
var idCHsR = charIDToTypeID ( "CHsR" );
desc15.putEnumerated ( idSWch, idSTch, idCHsR );
var idSWmd = charIDToTypeID ( "SWmd" );
var idSTmd = charIDToTypeID ( "STmd" );
var idMDCC = charIDToTypeID ( "MDCC" );
desc15.putEnumerated ( idSWmd, idSTmd, idMDCC );
var idohXH = charIDToTypeID ( "ohXH" );
desc15.putBoolean ( idohXH, false );
var idohIC = charIDToTypeID ( "ohIC" );
desc15.putBoolean ( idohIC, true );
var idohAA = charIDToTypeID ( "ohAA" );
desc15.putBoolean ( idohAA, true );
var idohQA = charIDToTypeID ( "ohQA" );
desc15.putBoolean ( idohQA, true );
var idohCA = charIDToTypeID ( "ohCA" );
desc15.putBoolean ( idohCA, false );
var idohIZ = charIDToTypeID ( "ohIZ" );
desc15.putBoolean ( idohIZ, true );
var idohTC = charIDToTypeID ( "ohTC" );
var idSToc = charIDToTypeID ( "SToc" );
var idOCzerothree = charIDToTypeID ( "OC03" );
desc15.putEnumerated ( idohTC, idSToc, idOCzerothree );
var idohAC = charIDToTypeID ( "ohAC" );
var idSToc = charIDToTypeID ( "SToc" );
var idOCzerothree = charIDToTypeID ( "OC03" );
desc15.putEnumerated ( idohAC, idSToc, idOCzerothree );
var idohIn = charIDToTypeID ( "ohIn" );
desc15.putInteger ( idohIn, -1 );
var idohLE = charIDToTypeID ( "ohLE" );
var idSTle = charIDToTypeID ( "STle" );
var idLEzerothree = charIDToTypeID ( "LE03" );
desc15.putEnumerated ( idohLE, idSTle, idLEzerothree );
var idohEn = charIDToTypeID ( "ohEn" );
var idSTen = charIDToTypeID ( "STen" );
var idENzerozero = charIDToTypeID ( "EN00" );
desc15.putEnumerated ( idohEn, idSTen, idENzerozero );
var idolCS = charIDToTypeID ( "olCS" );
desc15.putBoolean ( idolCS, false );
var idolEC = charIDToTypeID ( "olEC" );
var idSTst = charIDToTypeID ( "STst" );
var idSTzerozero = charIDToTypeID ( "ST00" );
desc15.putEnumerated ( idolEC, idSTst, idSTzerozero );
var idolWH = charIDToTypeID ( "olWH" );
var idSTwh = charIDToTypeID ( "STwh" );
var idWHzeroone = charIDToTypeID ( "WH01" );
desc15.putEnumerated ( idolWH, idSTwh, idWHzeroone );
var idolSV = charIDToTypeID ( "olSV" );
var idSTsp = charIDToTypeID ( "STsp" );
var idSPzerofour = charIDToTypeID ( "SP04" );
desc15.putEnumerated ( idolSV, idSTsp, idSPzerofour );
var idolSH = charIDToTypeID ( "olSH" );
var idSTsp = charIDToTypeID ( "STsp" );
var idSPzerofour = charIDToTypeID ( "SP04" );
desc15.putEnumerated ( idolSH, idSTsp, idSPzerofour );
var idolNC = charIDToTypeID ( "olNC" );
var list1 = new ActionList ();
var desc16 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCzerozero = charIDToTypeID ( "NC00" );
desc16.putEnumerated ( idncTp, idSTnc, idNCzerozero );
var idSCnc = charIDToTypeID ( "SCnc" );
list1.putObject ( idSCnc, desc16 );
var desc17 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNConenine = charIDToTypeID ( "NC19" );
desc17.putEnumerated ( idncTp, idSTnc, idNConenine );
var idSCnc = charIDToTypeID ( "SCnc" );
list1.putObject ( idSCnc, desc17 );
var desc18 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwoeight = charIDToTypeID ( "NC28" );
desc18.putEnumerated ( idncTp, idSTnc, idNCtwoeight );
var idSCnc = charIDToTypeID ( "SCnc" );
list1.putObject ( idSCnc, desc18 );
var desc19 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwofour = charIDToTypeID ( "NC24" );
desc19.putEnumerated ( idncTp, idSTnc, idNCtwofour );
var idSCnc = charIDToTypeID ( "SCnc" );
list1.putObject ( idSCnc, desc19 );
var desc20 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwofour = charIDToTypeID ( "NC24" );
desc20.putEnumerated ( idncTp, idSTnc, idNCtwofour );
var idSCnc = charIDToTypeID ( "SCnc" );
list1.putObject ( idSCnc, desc20 );
var desc21 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwofour = charIDToTypeID ( "NC24" );
desc21.putEnumerated ( idncTp, idSTnc, idNCtwofour );
var idSCnc = charIDToTypeID ( "SCnc" );
list1.putObject ( idSCnc, desc21 );
desc15.putList ( idolNC, list1 );
var idobIA = charIDToTypeID ( "obIA" );
desc15.putBoolean ( idobIA, false );
var idobIP = charIDToTypeID ( "obIP" );
desc15.putString ( idobIP, """""" );
var idobCS = charIDToTypeID ( "obCS" );
var idSTcs = charIDToTypeID ( "STcs" );
var idCSzeroone = charIDToTypeID ( "CS01" );
desc15.putEnumerated ( idobCS, idSTcs, idCSzeroone );
var idovNC = charIDToTypeID ( "ovNC" );
var list2 = new ActionList ();
var desc22 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCzeroone = charIDToTypeID ( "NC01" );
desc22.putEnumerated ( idncTp, idSTnc, idNCzeroone );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc22 );
var desc23 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwozero = charIDToTypeID ( "NC20" );
desc23.putEnumerated ( idncTp, idSTnc, idNCtwozero );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc23 );
var desc24 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCzerotwo = charIDToTypeID ( "NC02" );
desc24.putEnumerated ( idncTp, idSTnc, idNCzerotwo );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc24 );
var desc25 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNConenine = charIDToTypeID ( "NC19" );
desc25.putEnumerated ( idncTp, idSTnc, idNConenine );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc25 );
var desc26 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCzerosix = charIDToTypeID ( "NC06" );
desc26.putEnumerated ( idncTp, idSTnc, idNCzerosix );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc26 );
var desc27 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwofour = charIDToTypeID ( "NC24" );
desc27.putEnumerated ( idncTp, idSTnc, idNCtwofour );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc27 );
var desc28 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwofour = charIDToTypeID ( "NC24" );
desc28.putEnumerated ( idncTp, idSTnc, idNCtwofour );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc28 );
var desc29 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwofour = charIDToTypeID ( "NC24" );
desc29.putEnumerated ( idncTp, idSTnc, idNCtwofour );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc29 );
var desc30 = new ActionDescriptor ();
var idncTp = charIDToTypeID ( "ncTp" );
var idSTnc = charIDToTypeID ( "STnc" );
var idNCtwotwo = charIDToTypeID ( "NC22" );
desc30.putEnumerated ( idncTp, idSTnc, idNCtwotwo );
var idSCnc = charIDToTypeID ( "SCnc" );
list2.putObject ( idSCnc, desc30 );
desc15.putList ( idovNC, list2 );
var idovCM = charIDToTypeID ( "ovCM" );
desc15.putBoolean ( idovCM, false );
var idovCW = charIDToTypeID ( "ovCW" );
desc15.putBoolean ( idovCW, true );
var idovCU = charIDToTypeID ( "ovCU" );
desc15.putBoolean ( idovCU, true );
var idovSF = charIDToTypeID ( "ovSF" );
desc15.putBoolean ( idovSF, true );
var idovCB = charIDToTypeID ( "ovCB" );
desc15.putBoolean ( idovCB, true );
var idovSN = charIDToTypeID ( "ovSN" );
desc15.putString ( idovSN, """images""" );
var idSaveForWeb = stringIDToTypeID ( "SaveForWeb" );
desc14.putObject ( idUsng, idSaveForWeb, desc15 );
executeAction ( idExpr, desc14, DialogModes.NO );

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

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

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

Примечание. В Photoshop CC бесплатное приложение ExtendScript Toolkit CC надо скачать через Adobe Creative Cloud.

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

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

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

Скачать с Github
Оцените автора
( 45 оценок, среднее 4 из 5 )
Добавить комментарий