2013-01-17 11 views
8

Sto lavorando su uno script Photoshop in JavaScript utilizzando ExtendScript. Il mio script consente alcuni input dell'utente e mi piacerebbe salvarlo tra un utilizzo e l'altro. Cioè, sto cercando un modo per salvare una semplice stringa o un valore numerico sotto una particolare chiave in modo che potrò accedervi negli usi successivi dello script. In poche parole, voglio salvare una preferenza per il mio script. Come lo faccio?Salvataggio delle preferenze per utente o per documento in uno script Photoshop

Ancora meglio sarebbe essere in grado di salvare almeno alcune preferenze su una base per documento. È possibile? Cioè, posso memorizzare un bit arbitrario di dati con un documento?

+0

https://indisnip.wordpress.com/2010/09/07/storing-custom -data-into-indesign-file-xmp/si applica anche qui? –

risposta

10

È possibile utilizzare PUT/GET opzioni personalizzate per salvare i parametri di preferenza che persistono attraverso Photoshop lancia:

const kMyFlag = app.stringIDToTypeID("myFlag"); 
const kMyNumber = app.stringIDToTypeID("myNumber"); 
const kMySettings = "mySettings"; 

function saveSettings() 
{ 
    var desc = new ActionDescriptor(); 
    desc.putBoolean(kMyFlag, true); 
    desc.putInteger(kMyNumber, 42); 

    // "true" means setting persists across Photoshop launches. 
    app.putCustomOptions(kMySettings, desc, true); 
} 

function getSettings() 
{ 
    var desc = app.getCustomOptions(kMySettings); 
    return [desc.getBoolean(kMyFlag), desc.getInteger(kMyNumber)]; 
} 
Forse
+0

Modificato l'esempio per mostrare più valori sullo stesso descrittore. –

+0

Nel caso in cui qualcun altro lo trovi cercando una soluzione che funzioni in indesign: puoi usare app.insertLabel e app.extractLabel per memorizzare le tue preferenze – ChristophK

4

Avete alcune opzioni. È possibile creare un file di testo e scrivere su di esso utilizzando l'oggetto File:

var prefs = new File("~/desktop/prefs.txt"); 
prefs.open("w"); // or "a" to append 
prefs.writeln("user:lenny;favorite_color:ff6600;likes:sunsets;"); 

... se si voleva le preferenze legate al script stesso.

Se si vuole le preferenze per-documento che si potrebbe scrivere una stringa in uno dei campi di metadati del file tuo lavoro sull'utilizzo di Document.info come questo (usando il campo 'istruzioni', ma è possibile utilizzare qualsiasi campo scrivibile):

Per quanto riguarda la formattazione effettiva della stringa, è possibile farlo semplicemente come un semplice file di configurazione oppure, se si dispone di un oggetto di preferenze utente complesso, è possibile utilizzare l'oggetto XML per costruirlo e serializzarlo. JSON sarebbe fantastico per questo, ma purtroppo non vi è alcun oggetto JSON in Extendscript.

0

Per i prefetti per documento, suggerisco l'uso dei metadati XMP. Puoi trovare lo snippet di esempio qui: http://forums.adobe.com/thread/790973. Puoi sfruttare la libreria AdobeXMPScript per creare il tuo spazio dei nomi come suggerito nel link di Paul Riggott.

Problemi correlati