2013-01-17 11 views
8

Pracuję nad skryptem Photoshop w JavaScript przy użyciu ExtendScript. Mój skrypt zezwala na wprowadzanie danych przez użytkownika i chcę go zapisać w różnych zastosowaniach. To znaczy, szukam sposobu na zapisanie prostego łańcucha lub wartości numerycznej pod określonym kluczem, aby móc uzyskać do niego dostęp przy kolejnych użyciach skryptu. Mówiąc prosto, chcę zapisać preferencje dotyczące mojego scenariusza. Jak mogę to zrobić?Zapisywanie preferencji użytkownika lub dokumentu w skrypcie Photoshopa

Jeszcze lepiej byłoby móc zachować przynajmniej niektóre preferencje dla poszczególnych dokumentów. Czy to jest możliwe? Czy mogę przechowywać arbitralny bit danych z dokumentem?

+0

Może https://indisnip.wordpress.com/2010/09/07/storing-custom -data-into-indesign-file-xmp/stosuje się również tutaj? –

Odpowiedz

10

Można użyć umieścić/dostać niestandardowe opcje, aby zapisać parametry uprzywilejowanych, które nadal istnieją w całej Photoshop uruchamia:

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)]; 
} 
+0

Edytowano przykład, aby wyświetlić wiele wartości na tym samym deskryptorze. –

+0

Na wypadek, gdyby ktoś inny znalazł to rozwiązanie szukając rozwiązania działającego w trybie indesign: możesz użyć app.insertLabel i app.extractLabel do zapisania swoich preferencji – ChristophK

4

Masz kilka opcji. Można utworzyć plik tekstowy i napisać do niego przy użyciu obiektu File:

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

... jeśli chcesz swoje preferencje związane z samym skrypcie.

Jeśli chcesz per-dokumentu preferencje można napisać ciąg do jednego z pól metadanych pliku Twój roboczego na temat korzystania Document.info tak (przy użyciu pola „instrukcje”, ale można użyć dowolnego pola zapisu):

var doc = app.activeDocument; 
doc.info.instructions = "user:lenny;favorite_color:ff6600;likes:sunsets;"; 
//alert(doc.info.instructions); // see, it works! 

Co do tego, jak właściwie sformatować napis, można to zrobić jak zwykły plik konfiguracyjny lub, jeśli masz złożony obiekt preferencji użytkownika, możesz użyć obiektu XML, aby go skonstruować i przekształcić do postaci szeregowej. JSON byłby świetny, ale niestety nie ma obiektu JSON w Extendscript.

0

W przypadku prefendów na dokument sugeruję użycie metadanych XMP. Możesz znaleźć przykładowy fragment tutaj: http://forums.adobe.com/thread/790973. Możesz wykorzystać bibliotekę AdobeXMPScript, aby stworzyć własną przestrzeń nazw, tak jak sugeruje to link Paul Riggott.

Powiązane problemy