以下脚本几乎可以完成我需要的事情。我要做的是浏览打开的文档,其中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);
    }
}
有帮助吗?

解决方案

根据 Adobe 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的副本,也没有验证此解决方案。

其他提示

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

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

for (i = app.documents.length - 1; i >= 0; i--) { ... }

JBIZ解决方案+1。我不知道为什么我的循环无法完成。

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在完成后关闭文档时,每次迭代都会在每次迭代中变短。

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

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top