Potente automazione delle attività con Photoshop Scripting

Le azioni sono molto popolari. Sono facili da usare e possono farti risparmiare molto tempo, ma alla fine della giornata non sono molto potenti e offrono una versatilità molto bassa. Ecco dove le funzionalità di scripting di Photoshop entrano in azione. Vi mostreremo le possibilità quasi infinite offerte dallo scripting di Photoshop.


Azioni vs script

Un'azione è semplicemente un modo di registrare una serie di passaggi in modo che possiamo riprodurli ancora e ancora. Se vuoi essere in grado di disegnare rapidamente un quadrato rosso 50x50px premendo un pulsante, registralo facendo una sola volta, quindi riproduci l'azione ogni volta che ne hai bisogno. Hai finito. Ma, cosa succede se a volte hai bisogno di un quadrato rosso 50px e altre volte hai bisogno di un blu 100px? Bene, dovresti registrare un'altra azione per la seconda figura. Le azioni offrono una versatilità molto bassa, poiché i passaggi registrati sono statici, il loro comportamento non cambia in base alle variabili esterne.

Lo scripting di Photoshop ti consente di aggiungere logica condizionale, in modo che lo script assuma automaticamente le decisioni in base alla situazione corrente o all'input dell'utente. Ad esempio, nell'esempio precedente, uno script di Photoshop potrebbe chiedere all'utente la larghezza e il colore del riquadro,
e quindi renderlo correttamente. Inoltre, gli script offrono molti più vantaggi rispetto alle azioni, come la gestione avanzata dei file, il supporto di più applicazioni, ecc.


Nozioni di base su Photoshop Scripting

Uno script Photoshop è un file di testo con codice che indica al programma di eseguire determinate attività. Questi script possono essere scritti in tre diversi linguaggi di scripting. Se stai usando Mac OS, puoi usare AppleScript e JavaScript. Su Windows, puoi anche usare VBScript e JavaScript. Dato che JavaScript è completamente supportato su entrambe le piattaforme, è la scelta migliore per garantire che il nostro script raggiunga il più ampio pubblico, quindi ci concentreremo su questo argomento in questo articolo. Inoltre, JavaScript è il linguaggio di scripting lato client più popolare, quindi è probabile che ne abbiate sentito parlare in precedenza.

Il motore di scripting di Photoshop ci consente di manipolare i diversi elementi dell'applicazione, come livelli, guide, canali, documenti, ecc. Quasi ogni singolo elemento di Photoshop può essere esaminato e modificato da uno script. Questi sono riflessi nel modello a oggetti del documento di Photoshop. In questo articolo lavoreremo con alcuni elementi di base, ma ce ne sono molti, puoi vederli tutti nella documentazione ufficiale di Photoshop Scripting.

In bundle con Photoshop c'è un programma chiamato Adobe ExtendScript Toolkit CS5. È un ambiente di sviluppo integrato per lo scripting, non solo per Photoshop, ma per qualsiasi membro della Creative Suite. Per semplificare le cose, utilizzeremo un editor di testo semplice come Blocco note, ma per i grandi script Adobe ExtendScript Toolkit offre molti strumenti, come il completamento automatico del codice, la guida integrata e un debugger.

Quindi, senza ulteriori indugi, andiamo alla cartella Presets / Scripts nella directory di Photoshop, crea un file di testo vuoto chiamato firstScript.jsx e aprilo con il tuo editor di testo preferito.


Cosa succede nell'app, soggiorni nell'app

Quando abbiamo a che fare con gli script di Photoshop, tutto inizia con l'oggetto "app". Rappresenta l'applicazione e contiene tutti gli altri oggetti in modo gerarchico. In questo primo passaggio esamineremo alcune proprietà di base dell'oggetto "app".

Vai all'editor di testo e digita quanto segue in firstScript.jsx

alert ("Stai usando Photoshop versione" + app.version);

Quindi fai partire Photoshop e vai su File> Script> firstScript. Vedrai una finestra di avviso che dice "Stai usando Photoshop versione 12.0.0" (o la versione che stai utilizzando). La funzione "avviso" mostra un messaggio, una stringa con il testo e la versione dell'applicazione, letta dalla proprietà "versione" dell'oggetto "app". In JavaScript, puoi accedere alle proprietà e ai figli di un oggetto usando "." operatore, come in "app.version".

In Photoshop, l'ambiente di lavoro di base è il documento. L'oggetto "app" contiene una raccolta chiamata "documenti", che ovviamente rappresenta l'insieme di documenti aperti all'interno di Photoshop. Torniamo all'editor, sostituiamo il contenuto di firstScript.jsx con il seguente:

if (app.documents.length> 0) alert ("Ci sono" + app.documents.length + "documenti aperti");  else alert ("Non ci sono documenti aperti"); 

Se si avvia lo script (File> Script> firstScript), il messaggio di avviso cambierà in base al numero di documenti attualmente aperti. Il codice è molto semplice, la prima riga controlla se il numero di documenti aperti (ovvero la lunghezza del set di documenti nell'app) è maggiore di zero, mostrando un messaggio con quel numero. Altrimenti, mostra un messaggio che dice che non ci sono documenti aperti. Facile, non è vero? Ma finora questo non sembra troppo utile.


Guida al tuo lavoro

Proviamo con un esempio più utile. Ad esempio, supponiamo di voler dividere il documento in colonne di dimensioni uguali. Fare ciò manualmente significherebbe misurare la larghezza del documento, dividendolo per il numero di colonne e quindi posizionando con attenzione le guide. Cosa succede se hai bisogno di dodici colonne? Sarebbe una totale perdita di tempo. Vediamo un pezzo di codice che fa quel lavoro:

 if (app.documents.length> 0) var numberColumns = parseInt (prompt ("Quante colonne hai bisogno?", 5)); var doc = app.activeDocument; var documentWidth = doc.width; var columnWidth = documentWidth / numberColumns; per (i = 0; i <= numberColumns; ++i) doc.guides.add(Direction.VERTICAL, i * columnWidth);  

Non aver paura! Il codice è molto semplice. Sai già cosa significa la prima riga: "se c'è almeno un documento aperto, fai quanto segue". La riga successiva usa la funzione "prompt" per chiedere all'utente il numero di colonne e passa il suo risultato alla funzione "parseInt", che converte opportunamente in un numero intero. Il risultato è memorizzato nella variabile "numberColumns". Nel caso in cui non lo si conosca, le variabili vengono utilizzate nei linguaggi di programmazione per memorizzare i valori, quindi se si desidera salvare un determinato valore, si utilizza una variabile.

La terza riga crea una nuova variabile, chiamata "doc", che rappresenta il documento attivo. La quarta riga legge la larghezza del documento corrente e la memorizza nella variabile "documentWidth". La quinta riga calcola la larghezza di ogni colonna dividendo la larghezza totale per il numero di colonne. Infine, la sesta riga avvia un ciclo che si ripete una volta per colonna (più una volta per l'ultima guida). In ogni iterazione, la variabile "i" manterrà il numero di colonna corrente: 0, 1, 2, 3? La linea sesta aggiungerà una guida verticale al documento corrente, posizionata nella posizione corretta.

Per provare il codice, è lo stesso di prima. Sostituisci il contenuto del nostro file firstScript con il codice e poi vai su File> Script> firstScript.


Modifica tutto il testo allo stesso tempo

Quindi hai creato un ottimo web design, usando la sempre bella Helvetica, ma sembra che il client non lo abbia installato, preferisce Arial. Inoltre, vorrebbe assicurarsi che tutti conoscano il copyright del materiale, quindi insiste nell'aggiungere un avviso di copyright in ogni elemento di testo. "Nessun problema, conosco Photoshop Scripting!", Rispondi. Vediamo come si fa:

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

Le prime due linee sono già note. Quindi, c'è un nuovo elemento qui, la raccolta di livelli. Nello scripting di Photoshop, ci sono due tipi di livelli, da un lato abbiamo i "Layer Set", che sono essenzialmente gruppi, e dall'altro abbiamo i "Livelli dell'Arte", che includono tutti gli altri tipi di livelli: livelli normali, livelli di testo, livelli di regolazione, ecc. Il nostro oggetto documento ("app.activeDocument") ha una proprietà chiamata "artLayers", per accedere solo ai livelli art, un'altra proprietà chiamata "layerSets" per accedere ai set di livelli, quindi una proprietà chiamata semplicemente "layers", che include entrambi i set precedenti.

Nel nostro codice stiamo attraversando il set di livelli artistici del nostro documento. In ogni iterazione, memorizziamo il nostro layer corrente nella variabile "layer", quindi controlliamo se il tipo di layer è "LayerKind. TEXT", che rappresenta un livello di testo. In tal caso, accediamo alla proprietà textItem del nostro layer, che contiene tutte le caratteristiche del testo e cambia il suo attributo "font" in "ArialMT" (dobbiamo usare il nome PostScript del font). Inoltre, aggiungiamo la nota sul copyright ai contenuti del layer usando l'operatore "+ =" sulla proprietà "contents".


Lasciate che ci siano quadrati

Abbiamo lasciato il più difficile per la fine. L'esempio che abbiamo proposto all'inizio dell'articolo consisteva nell'avere un modo per creare automaticamente i quadrati, semplicemente scegliendo la dimensione e il colore. Bene, questo è un compito abbastanza facile per una sceneggiatura.

if (app.documents.length> 0) var doc = app.activeDocument; var squareSize = parseInt (prompt ("Seleziona la dimensione del quadrato", 50)); var squareColor = new RGBColor; squareColor.hexValue = prompt ("Seleziona il colore del quadrato (esadecimale)", "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 (); 

Questo è il codice più lungo che abbiamo visto finora, ma non è difficile da capire. Nella terza riga, chiediamo all'utente la dimensione del quadrato e lo memorizziamo nella variabile "squareSize". Successivamente, creiamo un nuovo RGBColor per specificare il colore del quadrato e leggiamo il valore esadecimale dall'input dell'utente.

Il prossimo passo è creare un livello. Accediamo al set "artLayers" dal documento attivo e usiamo il suo metodo "aggiungi" per aggiungere un nuovo livello, memorizzando un riferimento ad esso nella variabile "newLayer". Successivamente, cambiamo il suo nome in modo coerente.

L'ultimo passo è fare una selezione. Creiamo una matrice di matrici che indicano le coordinate di ciascun angolo della selezione. Quindi passiamo quella regione al metodo "select" dell'oggetto "selection" del documento attivo.

Infine, riempi la selezione usando il colore precedentemente definito, quindi deseleziona tutto. Il nostro creatore quadrato è finito!


Conclusione

Gli script si sono dimostrati molto più potenti e configurabili delle azioni. Sono certamente un po 'più difficili da creare, ma i risultati valgono lo sforzo. Inoltre, c'è una comunità sempre più grande e di supporto, e ci sono persino state create librerie javascript complete per lo scripting di Photoshop, come xtools, che è open source. Queste librerie cercano di soddisfare alcune lacune che altrimenti richiederebbero soluzioni di livello inferiore.

Inoltre, data la crescente popolarità dei pacchetti di azione per pochi soldi, penso che potrebbe esserci un mercato emergente per gli script pack, specialmente
per compiti di layout complessi e cose del genere. Spero che, con questo articolo, tu abbia imparato le basi dello scripting di Photoshop: divertiti a scrivere i tuoi script!

P.S .: ora potrebbe essere una buona opportunità dare un'occhiata ai Javascript di NetTuts della serie di video Null, che ti daranno una buona comprensione delle basi JavaScript dall'inizio alla fine.