Åtgärder är väldigt populära. De är lätta att använda och kan spara mycket tid, men i slutet av dagen är de inte mycket kraftfulla och erbjuder mycket låg mångsidighet. Det är där Photoshops skriptfunktioner går i aktion. Vi ska visa dig de nästan oändliga möjligheterna som Photoshop-skripting erbjuder.
En handling är helt enkelt ett sätt att spela in en serie steg så att vi kan spela upp dem igen och igen. Om du snabbt kan rita en röd fyrkant på 50x50px genom att trycka på en knapp, registrerar du dig själv en gång och spelar sedan åtgärden när du behöver den. Du är klar. Men, om ibland behöver du en 50px röd torg och andra gånger behöver du en 100px blå en? Tja, du skulle behöva spela in en annan åtgärd för den andra bilden. Åtgärder erbjuder mycket låg mångsidighet, eftersom de inspelade stegen är statiska - deras beteende ändras inte beroende på externa variabler.
Photoshop-skript kan du lägga till villkorlig logik, så att manuset automatiskt tar beslut baserat på den aktuella situationen eller användarinmatningen. Exempelvis kan ett Photoshop-skript i det föregående exemplet fråga användaren för torgets bredd och färg,
och gör det då korrekt. Dessutom erbjuder skript många fler fördelar än åtgärder, till exempel avancerad filhantering, flera applikationssupport mm.
Ett Photoshop-skript är en textfil med kod som anger att programmet ska göra vissa uppgifter. Dessa skript kan skrivas på tre olika skriptspråk. Om du kör Mac OS kan du använda AppleScript och JavaScript. På Windows kan du också använda VBScript och JavaScript. Givet JavaScript stöds fullt ut på båda plattformarna, det är det bästa valet att se till att vårt skript når den bredaste publiken, så vi kommer att fokusera på det genom hela denna artikel. Även JavaScript är det mest populära skrivningsspråket på klientsidan, så chansen är att du tidigare har hört talas om det.
Photoshops skriptmotor ger oss möjligheter att manipulera olika delar av programmet, till exempel skikt, guider, kanaler, dokument etc. Nästan varje enskilt element inom Photoshop kan granskas och ändras från ett manus. Dessa återspeglas i Photoshop Document Object Model. I den här artikeln kommer vi att arbeta med några grundläggande element, men det finns mycket, du kan se dem alla i den officiella Photoshop Scripting dokumentationen.
Bifogad med Photoshop finns ett program som heter Adobe ExtendScript Toolkit CS5. Det är en integrerad utvecklingsmiljö för skript, inte bara för Photoshop, men för någon av Creative Suite-medlemmarna. För att hålla sakerna enkla ska vi använda en vanlig textredigerare som Anteckningsblock, men för stora skript erbjuder Adobe ExtendScript Toolkit många verktyg, till exempel automatisk kodning, integrerad hjälp och en debugger.
Så utan vidare, låt oss gå till din Presets / Scripts-mapp i din Photoshop-katalog, skapa en tom textfil som heter firstScript.jsx och öppna den med din favorit textredigerare.
När vi hanterar Photoshop-skript börjar allt med "app" -objektet. Den representerar applikationen, och den innehåller alla andra objekt på hierarkiskt sätt. I det här första steget kommer vi att titta på några grundläggande egenskaper för "app" -objektet.
Gå till textredigeraren och skriv följande i firstScript.jsx
varning ("Du använder Photoshop version" + app.version);
Släck sedan Photoshop och gå till Arkiv> Skript> firstScript. Du kommer att se en varningsruta som säger att "Du använder Photoshop version 12.0.0" (eller den version du använder). Funktionen "alert" visar ett meddelande, en sträng med texten och versionen av programmet, läs från egenskapen "version" av "app" -objektet. I JavaScript kan du komma åt objektets egenskaper och barn med hjälp av "." operatör, som i "app.version".
I Photoshop är den grundläggande arbetsmiljön dokumentet. App-objektet innehåller en samling som heter "dokument", vilket uppenbarligen representerar uppsättningen öppna dokument inom Photoshop. Låt oss gå tillbaka till redigeraren, ersätt innehållet i firstScript.jsx med följande:
om (app.documents.length> 0) alert ("There are" + app.documents.length + "open documents"); else alert ("Det finns inga öppna dokument");
Om du startar skriptet (File> Scripts> firstScript) ändras varningsmeddelandet beroende på antalet öppna dokument. Koden är mycket enkel, den första raden kontrollerar om antalet öppna dokument (det vill säga längden på uppsättningen dokument i appen) är större än noll och visar ett meddelande med det numret. Annars visar det ett meddelande som säger att det inte finns några öppna dokument. Lätt, är det inte? Men så här ser det inte så bra ut.
Låt oss försöka med ett mer användbart exempel. Antag att du vill dela upp ditt dokument i lika stora kolumner. Om man gör det manuellt skulle det innebära att man mäter dokumentbredden, dividerar den med antalet kolumner och placerar sedan guiderna försiktigt. Vad händer om du behöver tolv kolumner? Det skulle vara ett totalt slöseri med tid. Låt oss se ett kodstycke som gör det här jobbet:
om (app.documents.length> 0) var numberColumns = parseInt (prompt ("Hur många kolumner behöver du?", 5)); var doc = app.activeDocument; var documentWidth = doc.width; var columnWidth = documentWidth / numberColumns; för (i = 0; i <= numberColumns; ++i) doc.guides.add(Direction.VERTICAL, i * columnWidth);
Var inte rädd! Koden är väldigt lätt. Du vet redan vad den första raden innebär: "om det finns minst ett öppet dokument, gör följande". Nästa rad använder funktionen "prompt" för att fråga användaren om antalet kolumner och skickar resultatet till "parseInt" -funktionen, som bekvämt omvandlar det till ett heltal. Resultatet lagras i variabeln "numberColumns". Bara om du inte vet det, används variabler i programmeringsspråk för att lagra värden, så om du vill spara ett visst värde använder du en variabel.
Den tredje raden skapar en ny variabel, kallad "doc", som representerar det aktiva dokumentet. Den fjärde raden läser bredden på det aktuella dokumentet och lagrar det i "documentWidth" -variabeln. Den femte raden beräknar bredden på varje kolumn genom att dividera den totala bredden med antalet kolumner. Slutligen startar den sjätte linjen en slinga som upprepas en gång per kolumn (plus en gång till för den sista guiden). I varje iteration kommer variabeln "i" att hålla det aktuella kolumnnumret: 0, 1, 2, 3? Den sjätte raden lägger till en vertikal guide till det aktuella dokumentet, placerat i rätt läge.
För att prova koden är den densamma som tidigare. Byt innehållet i vår firstScript-fil med koden och gå sedan till Arkiv> Skript> firstScript.
Så du har skapat en bra webbdesign med den alltid vackra Helvetica, men ser ut som om klienten inte har den installerad, han föredrar Arial. Han skulle också vilja se till att alla känner till materialets upphovsrätt, så han insisterar på att lägga till ett upphovsrättsligt meddelande i varje textelement. "Inget problem, jag känner till Photoshop Scripting!", Svarar du. Låt oss se hur man gör det:
om (app.documents.length! = 0) var doc = app.activeDocument; för (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 två första linjerna är redan kända. Sedan finns det ett nytt element här, lagsamlingen. I Photoshop-skript finns det två typer av lager. Å ena sidan har vi "Layer Sets", som i grunden är grupper, och å andra sidan har vi "Art Layers", som inkluderar alla andra typer av skikt: normallager, textlager, justeringslager etc. Vårt dokumentobjekt ("app.activeDocument") har en egenskap som heter "artLayers", för att bara få tillgång till konstlagren, en annan egenskap som heter "layerSets" för att komma åt laguppsättningarna och sedan en egenskap som kallas helt enkelt "lager", som inkluderar både tidigare uppsättningar.
I vår kod korsar vi uppsättningen konstlag i vårt dokument. I varje iteration lagrar vi vårt nuvarande lager i variabeln "lager", så kontrollerar vi om lagslaget är "LayerKind. TEXT", vilket representerar ett textlager. I så fall får vi tillgång till textItem-egenskapen i vårt lager, som innehåller alla textens egenskaper, och ändrar attributet "font" till "ArialMT" (vi behöver använda PostScript-namnet på teckensnittet). Dessutom lägger vi till upphovsrättsmeddelandet till lagrets innehåll genom att använda operatören "+ =" i egenskapen "innehåll".
Vi har lämnat det svåraste till slutet. Exemplet vi föreslog i början av artikeln bestod av att ha ett sätt att automatiskt skapa kvadrater, bara att välja storlek och färg. Tja, det är en ganska lätt uppgift för ett manus.
om (app.documents.length> 0) var doc = app.activeDocument; var squareSize = parseInt (prompt ("Välj kvadratens storlek", 50)); var squareColor = ny RGBColor; squareColor.hexValue = prompt ("Välj kvadratens färg (hexadecimal)", "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 ();
Det här är den längsta koden vi hittat hittills, men det är inte svårt att förstå. I den tredje raden frågar vi användaren för kvadratens storlek och lagrar den i "squareSize" -variabeln. Därefter skapar vi en ny RGBColor för att ange färgen på torget, och vi läser det hexadecimala värdet från användarinmatningen.
Nästa steg är att skapa ett lager. Vi får tillgång till "artLayers" -satsen från det aktiva dokumentet och använder dess "add" -metod för att lägga till ett nytt lager och lagra en referens till det i variabeln "newLayer". Därefter ändras namnet på namnet.
Det sista steget är att göra ett urval. Vi skapar en uppsättning arrays som indikerar koordinaterna för varje hörn av urvalet. Sedan skickar vi den regionen till "välj" -metoden i "selection" -objektet för det aktiva dokumentet.
Slutligen fyller vi urvalet med den tidigare definierade färgen och avmarkerar sedan alla. Vår fyrkantiga skapare är klar!
Skript har visat sig vara mer kraftfulla och konfigurerbara än åtgärder. De är verkligen lite svårare att skapa, men resultaten är värda insatsen. Det finns också ett allt större och stödjande samhälle, och det har till och med skapats kompletta javascriptbibliotek för Photoshop-skript, som xtools, vilket är öppen källkod. Dessa bibliotek försöker uppfylla vissa luckor som annars skulle kräva lägre nivålösningar.
Även med tanke på den ökade populariteten av åtgärdspaket för små pengar tror jag att det kan finnas en framväxande marknad för manuspaket, speciellt
för komplexa layoutuppgifter och sådant. Jag hoppas att med den här artikeln har du lärt dig grunderna i Photoshop scripting - ha kul att skriva egna skript!
P.S .: nu kan det vara ett bra tillfälle att titta på NetTuts Javascript från Nulls videoserier, vilket ger dig en bra förståelse av JavaScript-basics från början till slut.