如何使用Photoshop JavaScript脚本将另一个文档集中在另一个文档中?
-
30-09-2019 - |
题
以下脚本几乎可以完成我需要的事情。我要做的是浏览打开的文档,其中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);
不隶属于 StackOverflow