9

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

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

4

3 回答 3

12

您可以使用 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 )];
}
于 2013-04-11T23:22:57.683 回答
7

你有一些选择。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 对象。

于 2013-01-21T02:04:20.463 回答
1

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

于 2013-01-27T12:45:18.130 回答