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);
    }
}
War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top