在Photoshop脚本中保存每个用户或每个文档的首选项

时间:2013-01-17 21:33:48

标签: extendscript photoshop-script

我正在使用ExtendScript在JavaScript中处理Photoshop脚本。我的脚本允许一些用户输入,我想在使用之间保存它。也就是说,我正在寻找一种方法来保存特定键下的简单字符串或数值,以便我能够在后续使用脚本时访问它。简单地说,我想保存我的脚本的首选项。我该怎么做?

更好的是能够在每个文档的基础上保存至少一些首选项。那可能吗?也就是说,我可以用文档存储任意位数据吗?

3 个答案:

答案 0 :(得分: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 )];
}

答案 1 :(得分: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对象。

答案 2 :(得分:1)

对于每个文档的首选项,我建议使用XMP元数据。您可以在此处找到示例摘录:http://forums.adobe.com/thread/790973。您可以利用AdobeXMPScript库创建自己的命名空间,就像Paul Riggott在链接中建议的那样。