Kraftig oppgaveautomatisering med Photoshop Scripting

Handlinger er veldig populære. De er enkle å bruke og kan spare mye tid, men på slutten av dagen er de ikke veldig kraftige og gir svært lav allsidighet. Det er der Photoshops skriptfunksjoner går i gang. Vi skal vise deg de nesten endeløse mulighetene som Photoshop-skripting tilbyr.


Handlinger vs. Skript

En handling er rett og slett en måte å registrere en rekke trinn på, så vi kan spille dem igjen og igjen. Hvis du raskt vil tegne et rødt firkant på 50x50px ved å trykke på en knapp, må du bare registrere deg selv en gang, og deretter spille handlingen når du trenger det. Du er ferdig. Men hva om noen ganger trenger du en 50px rød firkant og andre ganger trenger du en 100px blå en? Vel, du må registrere en annen handling for den andre figuren. Handlinger gir svært lav allsidighet, fordi de registrerte trinnene er statiske - deres oppførsel endres ikke avhengig av eksterne variabler.

Photoshop scripting lar deg legge til betinget logikk, slik at skriptet automatisk tar beslutninger basert på den nåværende situasjonen eller brukerinngangen. For eksempel, i det forrige eksempelet, kunne et Photoshop-skript spør brukeren om kvadratets bredde og farge,
og gjør det riktig. Videre tilbyr skript mange flere fordeler i forhold til handlinger, for eksempel avansert filbehandling, flere applikasjonsstøtte, osv.


Grunnleggende om Photoshop Scripting

Et Photoshop-skript er en tekstfil med kode som forteller at programmet skal utføre bestemte oppgaver. Disse skriptene kan skrives på tre forskjellige skriptspråk. Hvis du kjører Mac OS, kan du bruke AppleScript og JavaScript. På Windows kan du også bruke VBScript og JavaScript. Gitt JavaScript er fullt støttet på begge plattformene, det er det beste valget for å sikre at vårt skript når til det bredeste publikum, så vi skal fokusere på det gjennom hele denne artikkelen. Også JavaScript er det mest populære script-språk på klientsiden, så sjansene er at du tidligere har hørt om det.

Photoshops skriptmotor gir oss muligheter til å manipulere de forskjellige elementene i applikasjonen, for eksempel lag, guider, kanaler, dokumenter, etc. Nesten hvert eneste element i Photoshop kan undersøkes og endres fra et skript. Disse gjenspeiles i Photoshop Document Object Model. I denne artikkelen skal vi jobbe med noen grunnleggende elementer, men det er mye, du kan se dem alle i Official Photoshop Scripting dokumentasjon.

Sammen med Photoshop er det et program kalt Adobe ExtendScript Toolkit CS5. Det er et integrert utviklingsmiljø for skripting, ikke bare for Photoshop, men for et av Creative Suite-medlemmene. For å holde det enkelt, skal vi bruke et vanlig tekstredigeringsprogram som Notisblokk, men for store skript tilbyr Adobe ExtendScript Toolkit mange verktøy, for eksempel kodeautomatisering, integrert hjelp og en debugger.

Så uten videre, la oss gå til mappen Presets / Scripts i Photoshop-katalogen din, lage en tom tekstfil kalt firstScript.jsx og åpne den med din favoritt tekstredigeringsprogram.


Hva skjer i appen, bor i appen

Når vi arbeider med Photoshop-skript, starter alt med "app" -objektet. Den representerer søknaden, og den inneholder alle de andre objektene på en hierarkisk måte. I dette første trinnet skal vi se på noen grunnleggende egenskaper for "app" -objektet.

Gå til tekstredigeringsprogrammet og skriv inn følgende i firstScript.jsx

varsling ("Du bruker Photoshop versjon" + app.version);

Deretter brann Photoshop og gå til File> Scripts> firstScript. Du vil se en advarselsboks som sier at du bruker Photoshop versjon 12.0.0 (eller den versjonen du bruker). Varselfunksjonen viser en melding, en streng med teksten og versjonen av programmet, lest fra "versjon" -egenskapen til "app" -objektet. I JavaScript kan du få tilgang til egenskapene og barna til et objekt ved hjelp av "." operatør, som i "app.version".

I Photoshop er det grunnleggende arbeidsmiljøet dokumentet. App-objektet inneholder en samling kalt "dokumenter", som åpenbart representerer settet av åpne dokumenter i Photoshop. La oss gå tilbake til redaktøren, erstatte innholdet til firstScript.jsx med følgende:

hvis (app.documents.length> 0) alert ("There are" + app.documents.length + "åpne dokumenter");  else alert ("Det er ingen åpne dokumenter"); 

Hvis du starter skriptet (Fil> Skript> firstScript), vil varselmeldingen endres avhengig av antall åpne dokumenter. Koden er veldig enkel, den første linjen sjekker om antall åpne dokumenter (det vil si lengden på settet av dokumenter i appen) er større enn null, og viser en melding med det nummeret. Ellers vises det en melding som sier at det ikke er åpne dokumenter. Enkelt, ikke sant? Men så langt ser det ikke så bra ut.


Veiledning til arbeidet ditt

La oss prøve med et mer nyttig eksempel. Anta for eksempel at du vil dele dokumentet i like store kolonner. Å gjøre det manuelt vil innebære å måle dokumentbredden, dividere den med antall kolonner og deretter plassere styrene forsiktig. Hva om du trenger tolv kolonner? Det ville være totalt bortkastet tid. La oss se et stykke kode som gjør den jobben:

 hvis (app.documents.length> 0) var numberColumns = parseInt (prompt ("Hvor mange kolonner trenger du?", 5)); var doc = app.activeDocument; var documentWidth = doc.width; var columnWidth = documentWidth / numberColumns; for (i = 0; i <= numberColumns; ++i) doc.guides.add(Direction.VERTICAL, i * columnWidth);  

Ikke vær redd! Koden er veldig enkel. Du vet allerede hva den første linjen betyr: "Hvis det er minst ett åpent dokument, gjør du følgende". Den neste linjen bruker "prompt" -funksjonen til å spørre brukeren for antall kolonner, og sender resultatet til "parseInt" -funksjonen, som praktisk konverterer det til et heltall. Resultatet lagres i variabelen "numberColumns". Bare hvis du ikke vet det, brukes variabler i programmeringsspråk for å lagre verdier, så hvis du vil lagre en bestemt verdi, bruker du en variabel.

Den tredje linjen oppretter en ny variabel, kalt "doc", som representerer det aktive dokumentet. Den fjerde linjen leser bredden på gjeldende dokument og lagrer den i "documentWidth" -variabelen. Den femte linjen beregner bredden på hver kolonne ved å dividere totalbredden med antall kolonner. Til slutt starter den sjette linjen en sløyfe som gjentar en gang per kolonne (pluss en gang til den siste guiden). I hver iterasjon vil variabelen "i" holde det nåværende kolonnnummeret: 0, 1, 2, 3? Den septiske linjen vil legge til en vertikal guide til gjeldende dokument, plassert i riktig posisjon.

For å prøve koden, er det det samme som før. Bytt innholdet til vår firstScript-fil med koden, og gå til Fil> Skript> firstScript.


Endre all tekst på samme tid

Så du har laget et flott webdesign, ved hjelp av den alltid vakre Helvetica, men ser ut som klienten ikke har den installert, han foretrekker Arial. Også, han vil gjerne sørge for at alle vet materialets opphavsrett slik at han insisterer på å legge til en opphavsrettsmelding i hvert tekstelement. "Ikke noe problem, jeg kjenner Photoshop Scripting!", Svarer du. La oss se hvordan du gjør det:

 hvis (app.documents.length! = 0) var doc = app.activeDocument; for (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";   

De to første linjene er allerede kjent. Deretter er det et nytt element her, lagsamlingen. I Photoshop-skripting er det to typer lag, på den ene siden har vi "Layer Sets", som egentlig er grupper, og på den annen side har vi "Art Layers", som inkluderer alle andre slags lag: normale lag, tekstlag, justeringslag osv. Vårt dokumentobjekt ("app.activeDocument") har en egenskap som heter "artLayers", for å få tilgang til kun kunstlagene, en annen egenskap som heter "layerSets" for å få tilgang til lagsettene, og deretter en eiendom som kalles bare "lag", som inkluderer begge tidligere sett.

I vår kode går vi gjennom settet av kunstlag i vårt dokument. I hver iterasjon lagrer vi vårt nåværende lag i variabelen "lag", og vi kontrollerer om lagets type er "LayerKind. TEXT", som representerer et tekstlag. I så fall får vi tilgang til textItem-egenskapen til laget vårt, som inneholder alle egenskapene til teksten, og endrer attributten "font" til "ArialMT" (vi må bruke PostScript-navnet på fonten). Vi legger også til opphavsrettsvarselet til innholdet i laget ved å bruke operatøren "+ =" på innholdet "innhold".


La det være firkanter

Vi har forlatt det vanskeligste for enden. Eksempelet vi foreslo i begynnelsen av artikkelen besto av å ha en måte å automatisk lage firkanter på, bare å velge størrelse og farge. Vel, det er en ganske enkel oppgave for et skript.

hvis (app.documents.length> 0) var doc = app.activeDocument; var squareSize = parseInt (prompt ("Velg størrelsen på torget", 50)); var squareColor = ny RGBColor; squareColor.hexValue = prompt ("Velg firkantets farge (heksadesimale)", "ff0000"); var newLayer = doc.artLayers.add (); newLayer.name = "Square -" + squareSize + "-" + squareColor.hexValue; selectedRegion = Array (Array (0,0), Array (0, squareSize), Array (squareSize, squareSize), Array (squareSize, 0)); doc.selection.select (selectedRegion); doc.selection.fill (squareColor); doc.selection.deselect (); 

Dette er den lengste koden vi har sett så langt, men det er ikke vanskelig å forstå. I den tredje linjen ber vi brukeren om størrelsen på plassen og lagrer den i "squareSize" -variabelen. Deretter oppretter vi en ny RGBColor for å angi fargen på torget, og vi leser den heksadesimale verdien fra brukerinngangen.

Det neste trinnet er å lage et lag. Vi får tilgang til "artLayers" -settet fra det aktive dokumentet, og bruker "add" -metoden for å legge til et nytt lag, og lagrer en referanse til det i variabelen "newLayer". Deretter endrer vi navnet sitt.

Det siste trinnet er å gjøre et valg. Vi lager en rekke arrays som indikerer koordinatene til hvert hjørne av utvalget. Deretter sender vi den regionen til "velg" -metoden til "utvalg" -objektet i det aktive dokumentet.

Til slutt fyller vi utvalget med den tidligere definerte farge, og fjerner deretter alle merkene. Vår firkant skaperen er ferdig!


Konklusjon

Skript har vist seg å være mye kraftigere og konfigurerbare enn handlinger. De er sikkert litt vanskeligere å lage, men resultatene er verdt innsatsen. Det er også et stadig større og støttende fellesskap, og det har også blitt opprettet komplette javascriptbiblioteker for Photoshop-skripting, som xtools, som er åpen kildekode. Disse bibliotekene forsøker å oppfylle noen hull som ellers ville kreve lavere nivåløsninger.

Også, gitt den stigende populariteten til handlingspakker for små penger, tror jeg det kan være et fremvoksende marked for scriptpakker, spesielt
for komplekse oppsettoppgaver og ting som det. Jeg håper at med denne artikkelen har du lært grunnleggende om Photoshop scripting - ha det gøy å skrive dine egne skript!

P.S .: Nå kan det være en god mulighet til å se på NetTuts Javascript fra Null videoserien, som gir deg en god forståelse av JavaScript-basics fra start til slutt.