Question

Ce script suivant fait presque ce que je dois. Ce que je suis en train de faire est de passer par les documents ouverts, 139 d'entre eux, et de les enregistrer au format JPEG. Mais ce qu'il manque passe d'un document ouvert à l'autre, il a sauvé la même image sur 139 fois. Je supposais doc.close() fermerait le document ouvert et donner une nouvelle mise au point, mais il ne fonctionne pas.

Voici le 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);
    }
}
Était-ce utile?

La solution

D'après le Adobe Photoshop CS2 JavaScript Guide des scripts il semble que vous devez attribuer à la propriété Application.activeDocument de faire ce document l'un sélectionné pour toutes les actions. Cela est logique puisque vous utilisez cette propriété dans la fonction saveForWebPNG sans activer explicitement le document dans le iterator dans le premier bloc. Il pourrait être aussi simple que la modification suivante:

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

Cependant, je n'ai pas une copie de Photoshop et n'a pas vérifié cette solution.

Autres conseils

Je sais que cela est beaucoup en retard, mais je suis tombé sur cette question et l'impression que je pourrais avoir une solution que quelqu'un sur la route peut être en mesure d'utiliser. Ainsi va ici.

Une solution consiste à ajuster la boucle. Disons qu'il ya 5 documents ouverts. app.documents.length serait 5. Lorsque vous fermez une, la longueur est maintenant 4, puis 3, etc. i est comptage comme app.documents.length diminue. Lorsque i = 3, app.documents.length = 2. Je pense que itérer arrière ferait l'affaire.

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

1 pour la solution de Jbiz. Je ne pouvais pas comprendre pourquoi ma boucle ne serait pas complète.

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 se raccourcit à chaque itération si la boucle si vous fermez le document lorsque vous avez terminé.

Vous voulez fermer le courant sélectionné (ou actif) document:

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top