2013-01-17 25 views
8

我正在使用ExtendScript在JavaScript中處理Photoshop腳本。我的腳本允許一些用戶輸入,並且我想在兩次使用之間保存它。也就是說,我正在尋找一種方法來保存特定鍵下的簡單字符串或數字值,以便在後續使用腳本時能夠訪問它。簡而言之,我想保存對我的腳本的偏好。我怎麼做?在Photoshop腳本中保存每個用戶或每個文檔首選項

更好的是能夠在每個文檔的基礎上至少保存一些偏好。那可能嗎?也就是說,我可以在文檔中存儲任意位的數據嗎?

+0

也許https://indisnip.wordpress.com/2010/09/07/storing-custom -data-into-indesign-file-xmp /這裏也適用? –

回答

10

您可以使用PUT/GET定製選項來保存跨Photoshop的持續偏好參數啓動:

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

編輯示例以在同一個描述符上顯示多個值。 –

+0

只是爲了防止其他人在尋找適用於indesign的解決方案時發現此問題:您可以使用app.insertLabel和app.extractLabel來存儲您的首選項 – ChristophK

4

你有一些選擇。你可以創建一個文本文件,並使用File對象寫它:

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

...如果你想你的喜好綁在腳本本身。

如果你想每個文檔的喜好,你可以寫一個字符串的文件你的工作的元數據字段的一個使用Document.info像這樣(使用「說明」字段,但你可以使用任何可寫域):

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

至於如何真正格式化字符串,你可以像做一個簡單的配置文件那樣做,或者如果你有一個複雜的用戶偏好對象,你可以使用XML對象來構造和序列化它。 JSON對此很好,但不幸的是,Extendscript中沒有JSON對象。

0

對於每個文檔的首選項,我建議使用XMP元數據。你可以在這裏找到示例代碼片段:http://forums.adobe.com/thread/790973。您可以利用AdobeXMPScript庫創建您自己的名稱空間,就像Paul Riggott的鏈接中所建議的那樣。

相關問題