Wie konzentriere ich mich ein anderes Dokument mit photoshop Javascript Scripting?
-
30-09-2019 - |
Frage
Das folgende Skript fast tut, was ich brauche. Was ich versuche durch die geöffneten Dokumente zu tun ist, gehen, 139 von ihnen, und sie als JPEG speichern. Doch was es fehlt, ist von einem geöffneten Dokument zum anderen zu bewegen, so dass es das gleiche Bild über 139 Mal gespeichert. Ich nahm doc.close()
würde das geöffnete Dokument schließen und einen neuen Schwerpunkt geben, aber es funktioniert nicht.
Hier ist der Code:
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);
}
}
Lösung
Nach dem Adobe Photoshop CS2 JavaScript Scripting Guide es sieht aus wie Sie auf die Application.activeDocument
Eigenschaft zuweisen müssen, das Dokument zu, um die aktuell ausgewählte für Handlungen. Dies macht Sinn, da Sie diese Eigenschaft in der saveForWebPNG
-Funktion verwenden, ohne explizit das Dokument im Iterator im ersten Block zu aktivieren. Es könnte als die folgende Änderung so einfach sein:
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();
}
Allerdings habe ich nicht über eine Kopie von Photoshop haben und haben diese Lösung nicht überprüft.
Andere Tipps
Ich weiß, das ist viel zu spät, aber ich kam gerade über diese Frage und das Gefühl, wie ich eine Lösung, dass jemand auf der Straße der Lage sein könnte möglicherweise zu verwenden. So, hier geht.
Eine Lösung ist die for-Schleife einzustellen. Sagen wir, es gibt 5 Dokumente geöffnet. app.documents.length wäre 5. Wenn Sie in der Nähe ein, die Länge 4 ist jetzt, dann 3 usw. i Zählen als app.documents.length abnimmt. Wenn i 3 =, app.documents.length = 2. Ich denke, dass rückwärts iteriert würde den Trick tun.
for (i = app.documents.length - 1; i >= 0; i--) { ... }
1 für jbiz-Lösung. Ich konnte nicht herausfinden, warum meine Schleife würde nicht abgeschlossen.
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 kürzer wird bei jeder Iteration durch die Schleife, wenn Sie das Dokument schließen, wenn Sie fertig sind.
Sie möchten die aktuelle ausgewählt (oder aktiv) Dokument schließen:
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);