1

以下脚本几乎可以满足我的需要。我要做的是浏览打开的文档,其中 139 个,并将它们保存为 jpeg。然而,它缺少的是从一个打开的文档移动到另一个,因此它保存了 139 次相同的图像。我以为doc.close()会关闭打开的文档并给出一个新的焦点,但事实并非如此。

这是代码:

var destination = "C:/Documents and Settings/Administrator/My Documents/small images"
for(var i = 0; i < 5; i++)
{
    doc = documents[i];
    name_ = doc.name.substring(0, doc.name.indexOf('.'))
    saveForWebPNG(destination, name_);
    doc.close();
}

function saveForWebPNG(outputFolderStr, filename)
{
    var opts, file;
    opts = new ExportOptionsSaveForWeb();
    opts.format = SaveDocumentType.JPEG;
    opts.quality = 60;
    if (filename.length > 27) {
        file = new File(outputFolderStr + "/temp.jpg");
        activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
        file.rename(filename + ".jpg");
    }
    else {
        file = new File(outputFolderStr + "/" + filename + ".jpg");
        activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
    }
}
4

5 回答 5

2

根据Adob​​e Photoshop CS2 JavaScript 脚本指南,看起来您需要分配Application.activeDocument属性以使该文档成为当前选择的任何操作。这是有道理的,因为您在saveForWebPNG函数中使用该属性而没有在第一个块的迭代器中显式激活文档。它可能就像以下更改一样简单:

for (var i = 0; i < 5; i++) {
  var doc = documents[i];
  app.activeDocument = doc; // Select that document.
  var name = doc.name.substring(0, doc.name.indexOf('.'))
  saveForWebPNG(destination, name);
  doc.close();
}

但是,我没有 Photoshop 的副本,也没有验证此解决方案。

于 2010-06-26T06:13:30.880 回答
0

我知道这已经很晚了,但是我刚刚遇到了这个问题,并且觉得我可能有一个解决方案,以后有人可以使用。所以这里。

一种解决方案是调整 for 循环。假设有 5 个文档打开。app.documents.length 将是 5。当您关闭一个时,长度现在是 4,然后是 3,等等。随着 app.documents.length 的减少,我正在计数。当 i = 3 时,app.documents.length = 2。我认为向后迭代可以解决问题。

for (i = app.documents.length - 1; i >= 0; i--) { ... }
于 2012-01-08T03:50:06.307 回答
0

@maerics 的答案是正确的。

但是,如果您不知道给定文档的索引,则可以按名称引用它,如下例所示:

// Assume 'hello.psd' and 'world.psd' are in same folder at script.
// Open the first file. It is the active document.
var scriptFile = new File($.fileName)
var scriptPath = scriptFile.parent.fsName
var file1obj = File(scriptPath + '/hello.psd')
var file1 = open(file1obj)

// Open the second file. The second file is now the active document.
var file2obj = File(scriptPath + '/world.psd')
var file2 = open(file2obj)

// Make the first file the active document
app.activeDocument = file1

// Make the second file the active document
app.activeDocument = file2
于 2020-04-18T04:02:37.650 回答
-1

+1 为 jbiz 的解决方案。我无法弄清楚为什么我的循环无法完成。

for (i=app.documents.length-1; i >= 0; i--) {
  doc = app.documents[i];
  app.activeDocument = doc;

  ...
  do whatever you need, save & close
  ...
}

如果您在完成后关闭文档,则 app.documents.length 会随着每次迭代而变短。

于 2013-05-09T04:13:42.200 回答
-1

您要关闭当前选定(或活动)的文档:

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
于 2017-09-07T16:49:21.823 回答