2010-06-26 159 views
1

这下面的脚本几乎做我需要的。我想要做的是浏览已打开的文档,其中139个,并将它们保存为jpeg。但是它缺少的是从一个打开的文档移动到另一个,所以它保存了139次相同的图像。我假设doc.close()会关闭打开的文档并给出新的焦点,但事实并非如此。photoshop JavaScript脚本问题

下面的代码:

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); 
    } 
} 

回答

2

根据它看起来像你需要分配给Application.activeDocument属性,以使当前选择的任何行动,该文档的Adobe Photoshop CS2 JavaScript Scripting Guide。这很有意义,因为您在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的副本,并且未验证此解决方案。

+0

链接给了404。 – expiredninja 2015-01-12 07:11:56

2

我知道这很晚了,但我刚刚遇到了这个问题,觉得我可能有一个解决方案,可能会有人在路上使用。所以在这里。

一个解决方案是调整for循环。假设有5个文档打开。 app.documents.length将是5.当你关闭一个时,长度现在是4,然后是3等。我正在计数,因为app.documents.length正在减少。当我= 3,app.documents.length = 2。我认为,向后迭代会做的伎俩。

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

+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得到与每次迭代虽然循环较短,如果您关闭该文档时,即可大功告成。

0

你想关闭当前选定的(或活动)的文档:

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);