Krachtige taakautomatisering met Photoshop-scripts

Acties zijn erg populair. Ze zijn gemakkelijk te gebruiken en kunnen u veel tijd besparen, maar aan het eind van de dag zijn ze niet erg krachtig en bieden ze een zeer lage veelzijdigheid. Dat is waar de scriptfuncties van Photoshop in actie komen. We laten je de bijna eindeloze mogelijkheden zien die Photoshop-scripting biedt.


Acties versus scripts

Een actie is gewoon een manier om een ​​reeks stappen op te nemen, zodat we ze steeds opnieuw kunnen afspelen. Als je snel een rood vierkant van 50x50px wilt kunnen tekenen door op een knop te drukken, neem je gewoon een keer een handeling op en speel je de actie wanneer je hem nodig hebt. U bent klaar. Maar wat als je soms een rood vierkant van 50px nodig hebt en andere keren een blauwe 100px nodig hebt? Nou, je zou een andere actie voor de tweede figuur moeten opnemen. Acties bieden een zeer lage veelzijdigheid, omdat de geregistreerde stappen statisch zijn - hun gedrag verandert niet, afhankelijk van externe variabelen.

Met Photoshop-scripts kunt u toevoegen voorwaardelijke logica, zodat het script automatisch beslissingen neemt op basis van de huidige situatie of de gebruikersinvoer. In het vorige voorbeeld kan een Photoshop-script bijvoorbeeld de gebruiker vragen naar de breedte en kleur van het vierkant,
en geef het vervolgens correct weer. Bovendien bieden scripts veel meer voordelen ten opzichte van acties, zoals geavanceerde bestandsafhandeling, ondersteuning voor meerdere applicaties, enz.


Basisprincipes van Photoshop Scripting

Een Photoshop-script is een tekstbestand met code die het programma vertelt om bepaalde taken uit te voeren. Deze scripts kunnen in drie verschillende scripttalen worden geschreven. Als u Mac OS gebruikt, kunt u AppleScript en JavaScript gebruiken. In Windows kunt u ook VBScript en JavaScript gebruiken. Aangezien JavaScript volledig wordt ondersteund op beide platforms, is het de beste keuze om ervoor te zorgen dat ons script het breedste publiek bereikt, dus we gaan ons er in dit artikel op richten. JavaScript is ook de meest populaire client-side scriptingtaal, dus de kans is groot dat je er eerder van hebt gehoord.

De scripting engine van Photoshop biedt ons manieren om de verschillende elementen van de toepassing te manipuleren, zoals lagen, hulplijnen, kanalen, documenten, enzovoort. Bijna elk afzonderlijk element in Photoshop kan worden onderzocht en gewijzigd vanuit een script. Deze worden weerspiegeld in het Photoshop Document Object Model. In dit artikel gaan we met enkele basiselementen werken, maar er zijn veel, je kunt ze allemaal zien in de officiële documentatie over Photoshop Scripting.

Gebundeld met Photoshop is er een programma genaamd Adobe ExtendScript Toolkit CS5. Het is een geïntegreerde ontwikkelomgeving voor scripting, niet alleen voor Photoshop, maar voor elk Creative Suite-lid. Om de zaken simpel te houden, gebruiken we een gewone teksteditor zoals Notepad, maar voor grote scripts biedt Adobe ExtendScript Toolkit veel hulpmiddelen, zoals automatische aanvulling van code, geïntegreerde hulp en een debugger.

Dus zonder meer, laten we naar je map Presets / Scripts gaan in je Photoshop-map, een leeg tekstbestand maken met de naam firstScript.jsx en openen met je favoriete teksteditor.


Wat gebeurt er in de app, blijft in de app

Wanneer we te maken hebben met Photoshop-scripts, begint alles met het "app" -object. Het vertegenwoordigt de applicatie en het bevat alle andere objecten op een hiërarchische manier. In deze eerste stap gaan we kijken naar enkele basiseigenschappen van het "app" -object.

Ga naar de teksteditor en typ het volgende in firstScript.jsx

alert ("U gebruikt de Photoshop-versie" + app.version);

Vuur vervolgens Photoshop af en ga naar Bestand> Scripts> firstScript. U zult een waarschuwingsvenster zien met de melding "U gebruikt Photoshop versie 12.0.0" (of de versie die u gebruikt). De "alert" -functie toont een bericht, een string met de tekst en de versie van de applicatie, gelezen uit de "version" -eigenschap van het "app" -object. In JavaScript hebt u toegang tot de eigenschappen en onderliggende elementen van een object met de "." operator, zoals in "app.version".

In Photoshop is de basiswerkomgeving het document. Het "app" -object bevat een verzameling met de naam "documenten", die duidelijk de reeks geopende documenten binnen Photoshop vertegenwoordigt. Laten we teruggaan naar de editor, de inhoud van firstScript.jsx vervangen door het volgende:

if (app.documents.length> 0) alert ("Er zijn" + app.documents.length + "open documents");  else alert ("Er zijn geen open documenten"); 

Als u het script start (Bestand> Scripts> firstScript), verandert het waarschuwingsbericht afhankelijk van het aantal geopende documenten. De code is heel eenvoudig, de eerste regel controleert of het aantal open documenten (dat wil zeggen de lengte van de set documenten in de app) groter is dan nul, en toont een bericht met dat nummer. Anders wordt een bericht weergegeven dat er geen open documenten zijn. Makkelijk, toch? Maar tot nu toe lijkt dit niet zo nuttig.


Leid je werk

Laten we het proberen met een bruikbaarder voorbeeld. Stel dat u uw document in kolommen van gelijke grootte wilt verdelen. Handmatig doen zou betekenen dat de breedte van het document wordt gemeten, het wordt gedeeld door het aantal kolommen en vervolgens de geleiders zorgvuldig worden geplaatst. Wat als je twaalf kolommen nodig hebt? Dat zou een totale verspilling van tijd zijn. Laten we een stukje code bekijken dat dat doet:

 if (app.documents.length> 0) var numberColumns = parseInt (prompt ("Hoeveel kolommen heeft u nodig?", 5)); var doc = app.activeDocument; var documentWidth = doc.width; var columnWidth = documentWidth / numberColumns; voor (i = 0; i <= numberColumns; ++i) doc.guides.add(Direction.VERTICAL, i * columnWidth);  

Wees niet bang! De code is heel eenvoudig. U weet al wat de eerste regel betekent: "als er ten minste één geopend document is, doet u het volgende". De volgende regel gebruikt de "prompt" -functie om de gebruiker om het aantal kolommen te vragen en geeft het resultaat door aan de "parseInt" -functie, die het handig omzet in een geheel getal. Het resultaat wordt opgeslagen in de variabele "numberColumns". Voor het geval u het niet weet, worden in programmeertalen variabelen gebruikt om waarden op te slaan, dus als u een bepaalde waarde wilt opslaan, gebruikt u een variabele.

De derde regel maakt een nieuwe variabele, genaamd "doc", die het actieve document vertegenwoordigt. De vierde regel leest de breedte van het huidige document en slaat het op in de variabele "documentWidth". De vijfde regel berekent de breedte van elke kolom door de totale breedte te delen door het aantal kolommen. Ten slotte start de zesde regel een lus die eenmaal per kolom wordt herhaald (plus nogmaals voor de laatste gids). In elke iteratie bevat de variabele "i" het huidige kolomnummer: 0, 1, 2, 3? De lijn op de lijn voegt een verticale gids toe aan het huidige document, geplaatst op de juiste positie.

Om de code te proberen, is deze hetzelfde als voorheen. Vervang de inhoud van ons firstScript-bestand door de code en ga vervolgens naar Bestand> Scripts> firstScript.


Wijzig al uw tekst tegelijkertijd

Dus je hebt een geweldig webontwerp gemaakt met de altijd mooie Helvetica, maar het lijkt erop dat de client het niet heeft geïnstalleerd, hij geeft de voorkeur aan Arial. Ook wil hij ervoor zorgen dat iedereen de auteursrechten van het materiaal kent, zodat hij erop staat dat in elk tekstelement een auteursrechtvermelding wordt toegevoegd. "Geen probleem, ik ken Photoshop Scripting!", Antwoord je. Laten we kijken hoe het te doen:

 if (app.documents.length! = 0) var doc = app.activeDocument; voor (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 eerste twee regels zijn al bekend. Dan is er hier een nieuw element, de lagencollectie. In Photoshop-scripting zijn er twee soorten lagen, aan de ene kant hebben we de "Layer Sets", die in wezen groepen zijn, en aan de andere kant hebben we de "Art Layers", die alle andere soorten lagen omvatten: normale lagen, tekstlagen, aanpassingslagen, enzovoort. Ons documentobject ("app.activeDocument") heeft een eigenschap met de naam "artLayers" om alleen de kunstlagen te openen, een andere eigenschap genaamd "layerSets" om toegang te krijgen tot de lagengroepen en vervolgens een eigenschap die eenvoudig "lagen" wordt genoemd, die beide vorige sets omvat.

In onze code doorlopen we de set van kunstlagen van ons document. In elke iteratie slaan we onze huidige laag op in de variabele "laag", vervolgens controleren we of de soort van de laag "LayerKind.TEXT" is, wat een tekstlaag vertegenwoordigt. In dat geval hebben we toegang tot de eigenschap textItem van onze laag, die alle kenmerken van de tekst bevat en het "lettertype" -attribuut verandert in "ArialMT" (we moeten de PostScript-naam van het lettertype gebruiken). We voegen ook de copyright-melding toe aan de inhoud van de laag met de operator "+ =" in de eigenschap "contents".


Laat er vierkanten zijn

We hebben het moeilijkste achtergelaten voor het einde. Het voorbeeld dat we aan het begin van het artikel hebben voorgesteld, bestond uit een manier om automatisch vierkanten te maken, gewoon de grootte en de kleur te kiezen. Nou, dat is een vrij eenvoudige taak voor een script.

if (app.documents.length> 0) var doc = app.activeDocument; var squareSize = parseInt (prompt ("Selecteer de grootte van het vierkant", 50)); var squareColor = nieuwe RGBColor; squareColor.hexValue = prompt ("Selecteer de kleur van het vierkant (hexadecimaal)", "ff0000"); var newLayer = doc.artLayers.add (); newLayer.name = "Vierkant -" + vierkantSize + "-" + 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 (); 

Dit is de langste code die we tot nu toe hebben gezien, maar het is niet moeilijk te begrijpen. In de derde regel vragen we de gebruiker om de grootte van het vierkant en opslaan in de variabele "squareSize". Vervolgens maken we een nieuwe RGB-kleur om de kleur van het vierkant op te geven en we lezen de hexadecimale waarde van de gebruikersinvoer.

De volgende stap is om een ​​laag te maken. We openen de set "artLayers" van het actieve document en gebruiken de "add" -methode om een ​​nieuwe laag toe te voegen, waarbij een verwijzing ernaar wordt opgeslagen in de variabele "newLayer". Vervolgens veranderen we de naam ervan.

De laatste stap is om een ​​selectie te maken. We maken een array van matrices die de coördinaten van elke hoek van de selectie aangeven. Vervolgens geven we dat gebied door aan de "select" -methode van het "selectie" -object van het actieve document.

Ten slotte vullen we de selectie met de eerder gedefinieerde kleur en deselecteren we alles. Onze vierkante maker is klaar!


Conclusie

Scripts zijn bewezen veel krachtiger en configureerbaar dan acties. Ze zijn zeker een beetje moeilijker te maken, maar de resultaten zijn de moeite waard. Er is ook een steeds groter wordende en ondersteunende community en er zijn zelfs complete javascript-bibliotheken gemaakt voor Photoshop-scripting, zoals xtools, wat open source is. Deze bibliotheken proberen een aantal hiaten te vervullen die anders oplossingen op een lager niveau zouden vereisen.

Mede gezien de toenemende populariteit van actiepakketten voor weinig geld, denk ik dat er mogelijk een opkomende markt is voor scriptpakketten
voor complexe opmaaktaken en dergelijke. Ik hoop dat je met dit artikel de basisprincipes van Photoshop-scripting hebt geleerd - veel plezier met het schrijven van je eigen scripts!

P.S .: nu kan het een goede gelegenheid zijn om eens te kijken naar NetTuts Javascript uit Null-videoseries, waardoor je een goed begrip krijgt van JavaScript-basics van begin tot eind.