Powerful Task Automation cu Photoshop Scripting

Acțiunile sunt foarte populare. Sunt ușor de folosit și vă pot economisi mult timp, dar la sfârșitul zilei nu sunt foarte puternice și oferă o versatilitate foarte scăzută. Aici funcțiile de scripting ale Photoshop-ului intră în acțiune. Vă vom arăta posibilitățile aproape nesfârșite oferite de scriptingul Photoshop.


Acțiuni vs. Scripturi

O acțiune este pur și simplu o modalitate de a înregistra o serie de pași, astfel încât să le putem reda din nou și din nou. Dacă doriți să puteți desena rapid o pătrată roșie de 50x50 pixeli prin apăsarea unui buton, înregistrați-vă doar o dată, apoi jucați acțiunea ori de câte ori aveți nevoie de ea. Ați terminat. Dar, dacă uneori aveți nevoie de un pătrat roșu de 50px și de alte ori aveți nevoie de o culoare albastră de 100px? Ei bine, va trebui să înregistrați o altă acțiune pentru a doua cifră. Acțiunile oferă versatilitate foarte scăzută, deoarece pașii înregistrați sunt statici - comportamentul lor nu se modifică în funcție de variabilele externe.

Photoshop scripting vă permite să adăugați logica condiționată, astfel încât scriptul să ia decizii în mod automat pe baza situației curente sau a intrării utilizatorului. De exemplu, în exemplul anterior, un script Photoshop ar putea solicita utilizatorului lățimea și culoarea pătratului,
și apoi redați-o în mod corespunzător. În plus, scripturile oferă mult mai multe avantaje față de acțiuni, cum ar fi manipularea avansată a fișierelor, suportul pentru aplicații multiple etc..


Noțiuni de bază despre Photoscript Scripting

Un script Photoshop este un fișier text cu cod care îi spune programului să facă anumite sarcini. Aceste scripturi pot fi scrise în trei limbi diferite de scripting. Dacă executați Mac OS, puteți utiliza AppleScript și JavaScript. Pe Windows, puteți utiliza și VBScript și JavaScript. Având în vedere că JavaScript este pe deplin acceptat pe ambele platforme, este cea mai bună alegere pentru a ne asigura că scenariul nostru ajunge la cea mai largă audiență, așa că ne vom concentra asupra acestui articol. De asemenea, JavaScript este cel mai popular limbaj de scripting pe partea clientului, deci șansele sunt că ați auzit de el anterior.

Motorul de scripting Photoshop ne oferă modalități de manipulare a diferitelor elemente ale aplicației, cum ar fi straturi, ghiduri, canale, documente etc. Aproape fiecare element din Photoshop poate fi examinat și modificat dintr-un script. Acestea sunt reflectate în modelul Object Document Document Photoshop. În acest articol vom lucra cu câteva elemente de bază, dar sunt multe, le puteți vedea în documentația oficială Photoshop Scripting.

Bundled cu Photoshop există un program numit Adobe ExtendScript Toolkit CS5. Este un mediu integrat de dezvoltare pentru scripting, nu numai pentru Photoshop, ci pentru oricare dintre membrii Creative Suite. Pentru a păstra lucrurile simple, vom folosi un editor de text simplu, cum ar fi Notepad, dar pentru scripturile mari Adobe ExtendScript Toolkit oferă o mulțime de instrumente, cum ar fi auto-finalizarea codului, ajutorul integrat și un program de depanare.

Așadar, fără să mai vorbim, să mergem la dosarul Presetări / Scripturi din directorul Photoshop, să creăm un fișier text gol numit firstScript.jsx și să îl deschidem cu editorul de text preferat.


Ce se întâmplă în aplicație, rămâne în aplicație

Când avem de-a face cu scripturile Photoshop, totul începe cu obiectul "app". Acesta reprezintă aplicația și conține toate celelalte obiecte în mod ierarhic. În acest prim pas vom examina câteva proprietăți de bază ale obiectului "app".

Accesați editorul de text și tastați următoarele în firstScript.jsx

alertă ("Utilizați versiunea Photoshop" + versiune aplicație);

Apoi trageți Photoshop și mergeți la File> Scripts> firstScript. Veți vedea o casetă de alertă care spune că "utilizați versiunea 12.0.0 a Photoshop" (sau versiunea pe care o utilizați). Funcția "alertă" afișează un mesaj, un șir cu textul și versiunea aplicației, citit din proprietatea "versiune" a obiectului "app". În JavaScript, puteți accesa proprietățile și copiii unui obiect utilizând funcția "." operator, ca în "app.version".

În Photoshop, mediul de lucru de bază este documentul. Obiectul "app" conține o colecție numită "documente", care reprezintă în mod evident setul de documente deschise din cadrul Photoshop. Să ne întoarcem la editor, să înlocuiți conținutul firstScript.jsx cu următoarele:

dacă (app.documents.length> 0) alert ("Există" + app.documents.length + "documente deschise");  altceva alert ("Nu există documente deschise"); 

Dacă lansați scriptul (File> Scripts> firstScript), mesajul de avertizare se va modifica în funcție de numărul de documente deschise în prezent. Codul este foarte simplu, prima linie verifică dacă numărul de documente deschise (adică lungimea setului de documente din aplicație) este mai mare decât zero, afișând un mesaj cu acel număr. În caz contrar, se afișează un mesaj care spune că nu există documente deschise. Ușor, nu-i așa? Dar până acum acest lucru nu pare prea util.


Ghidează-ți lucrarea

Să încercăm cu un exemplu mai util. De exemplu, să presupunem că doriți să vă împărțiți documentul în coloane de dimensiuni egale. Făcând acest lucru manual ar presupune măsurarea lățimii documentului, împărțind-o cu numărul de coloane și apoi plasând cu grijă ghidajele. Dacă ai nevoie de douăsprezece coloane? Asta ar fi o pierdere totală de timp. Să vedem o bucată de cod care face acea slujbă:

 dacă (app.documents.length> 0) var numberColumns = parseInt (prompt ("Câte coloane aveți nevoie?", 5)); var doc = app.activeDocument; var documentWidth = doc.width; var columnWidth = documentWidth / numberColumns; pentru (i = 0; i <= numberColumns; ++i) doc.guides.add(Direction.VERTICAL, i * columnWidth);  

Nu te speria! Codul este foarte simplu. Știți deja ce înseamnă prima linie: "dacă există cel puțin un document deschis, faceți următoarele". Următoarea linie utilizează funcția "prompt" pentru a cere utilizatorului numărul de coloane și transmite rezultatul său la funcția "parseInt", care o convertește convenabil într-un număr întreg. Rezultatul este stocat în variabila "numberColumns". Doar în cazul în care nu știți, variabilele sunt utilizate în limbile de programare pentru stocarea valorilor, deci dacă doriți să salvați o anumită valoare, utilizați o variabilă.

Cea de-a treia linie creează o nouă variabilă, numită "doc", care reprezintă documentul activ. A patra linie citește lățimea documentului curent și îl stochează în variabila "documentWidth". Cea de-a cincea linie calculează lățimea fiecărei coloane împărțind lățimea totală cu numărul de coloane. În cele din urmă, linia a șase începe o buclă care se repetă o dată pe coloană (plus o dată pentru ultimul ghid). În fiecare iterație, variabila "i" va menține numărul coloanei curente: 0, 1, 2, 3? Linia septică va adăuga un ghid vertical pentru documentul curent, plasat în poziția corectă.

Pentru a încerca codul, este la fel ca înainte. Înlocuiți conținutul fișierului nostru firstScript cu codul și apoi mergeți la File> Scripts> firstScript.


Modificați tot textul în același timp

Ați creat un design web minunat, folosind Helvetica întotdeauna frumos, dar se pare că clientul nu îl are instalat, preferă Arial. De asemenea, el ar dori să se asigure că toată lumea cunoaște drepturile de autor, așa că insistă asupra adăugării unei notificări privind drepturile de autor în fiecare element de text. "Nici o problemă, știu Photoshop Scripting!", Răspundeți. Să vedem cum să procedăm:

 dacă (app.documents.length! = 0) var doc = app.activeDocument; pentru (i = 0; i < doc.artLayers.length; ++i) var layer = doc.artLayers[i]; if(layer.kind == LayerKind.TEXT) layer.textItem.font = "ArialMT"; layer.textItem.contents += " ? 2011 Envato";   

Primele două linii sunt deja cunoscute. Apoi, există un element nou aici, colecția de straturi. În scenariile Photoshop există două tipuri de straturi, pe de o parte avem "seturile de straturi", care sunt în esență grupuri, iar pe de altă parte avem "straturile de artă", care includ toate celelalte tipuri de straturi: straturi de text, straturi de ajustare etc. Obiectul nostru document ("app.activeDocument") are o proprietate numită "artLayers", pentru a accesa doar straturile de artă, o altă proprietate numită "layerSets" pentru a accesa seturile de straturi o proprietate numită simplu "straturi", care include atât seturi anterioare.

În codul nostru traversăm setul de straturi de artă din documentul nostru. În fiecare iterație, stocăm stratul nostru curent în variabila "layer", apoi verificăm dacă tipul stratului este "LayerKind.TEXT", care reprezintă un strat de text. În acest caz, accesăm proprietatea textItem a stratului nostru, care deține toate caracteristicile textului și schimbăm atributul "font" în "ArialMT" (trebuie să folosim numele PostScript al fontului). De asemenea, adăugăm nota privind drepturile de autor la conținutul stratului, utilizând "+ =" operatorul din proprietatea "conținut".


Hai să fie niște pătrate

Am părăsit cel mai greu pentru sfârșit. Exemplul pe care l-am propus la începutul articolului a constat în a avea o modalitate de a crea în mod automat pătrate, doar alegerea dimensiunii și a culorii. Ei bine, este o sarcină foarte ușoară pentru un scenariu.

dacă (app.documents.length> 0) var doc = app.activeDocument; var squareSize = parseInt (prompt ("Selectați dimensiunea pătratului", 50)); var squareColor = nou RGBColor; squareColor.hexValue = prompt ("Selectați culoarea pătratului (hexazecimal)", "ff0000"); var newLayer = doc.artLayers.add (); newLayer.name = "Square" - + squareSize + "-" + squareColor.hexValue; selectRegion = array (array (0,0), array (0, squareSize), array (squareSize, squareSize), array (squareSize, 0)); doc.selection.select (selectedRegion); doc.selection.fill (squareColor); doc.selection.deselect (); 

Acesta este cel mai lung cod pe care l-am văzut până acum, dar nu este greu de înțeles. În a treia linie, cerem utilizatorului dimensiunea pătratului și îl stocăm în variabila "squareSize". Apoi, vom crea un nou RGBColor pentru a specifica culoarea pătratului și citim valoarea hexazecimală din intrarea utilizatorului.

Următorul pas este să creați un strat. Accesăm setul "artLayers" din documentul activ și folosim metoda lui "add" pentru a adăuga un nou strat, stocând o referință la acesta în variabila "newLayer". Apoi, îi schimbăm denumirea în mod corespunzător.

Ultimul pas este să faceți o selecție. Creăm o serie de tablouri care indică coordonatele fiecărui colț al selecției. Apoi trecem această regiune la metoda "select" a obiectului "selecție" al documentului activ.

În cele din urmă, vom completa selecția utilizând culoarea definită anterior și apoi deselectăm toate. Creatorul nostru pătrat este terminat!


Concluzie

Scripturile s-au dovedit a fi mult mai puternice și configurabile decât acțiunile. Cu siguranță sunt puțin mai greu de creat, dar rezultatele merită efortul. De asemenea, există o comunitate din ce în ce mai mare și mai susținută, și au fost create chiar și biblioteci javascript complete pentru script-ul Photoshop, cum ar fi xtools, care este open source. Aceste biblioteci încearcă să îndeplinească anumite lacune care altfel ar necesita soluții la nivel inferior.

De asemenea, având în vedere popularitatea în creștere a pachetelor de acțiune pentru puțini bani, cred că ar putea exista o piață emergentă pentru pachetele de scripturi, în special
pentru sarcini complexe de aspect și lucruri de genul ăsta. Sper că, odată cu acest articol, ați învățat elementele de bază ale scriptului Photoshop - distrați-vă să scrieți propriile scenarii!

P.S .: acum ar putea fi o ocazie bună să aruncăm o privire la Javascript-ul NetTuts din seria video Null, care vă va oferi o bună înțelegere a principiilor de bază ale JavaScript de la început până la sfârșit.