2010-06-26 5 views
1

Ce script suivant fait presque ce dont j'ai besoin. Ce que j'essaie de faire, c'est de parcourir les documents ouverts, 139 d'entre eux, et de les enregistrer en format jpeg. Cependant, ce qui manque c'est de passer d'un document ouvert à l'autre, donc il a sauvegardé la même image plus de 139 fois. J'ai supposé que doc.close() fermerait le document ouvert et donnerait un nouveau focus, mais ce n'est pas le cas.photoshop javascript scripting question

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

Répondre

2

Selon le Adobe Photoshop CS2 JavaScript Scripting Guide il semble que vous devez attribuer à la propriété Application.activeDocument pour faire ce document celui 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 l'itérateur du premier bloc. Il pourrait être aussi simple que le changement suivant:

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 de copie de Photoshop et je n'ai pas vérifié cette solution.

+0

a donné 404. – expiredninja

2

Je sais que c'est beaucoup en retard, mais je suis juste tombé sur cette question et je me sens comme si j'avais une solution que quelqu'un d'autre pourrait utiliser. Alors voilà.

Une solution consiste à ajuster la boucle for. Disons qu'il y a 5 documents ouverts. app.documents.length serait 5. Lorsque vous en fermez un, la longueur est maintenant 4, puis 3, etc. i compte comme app.documents.length est décroissant. Quand i = 3, app.documents.length = 2. Je pense qu'iterer en arrière ferait l'affaire.

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

+1 pour la solution de jbiz. Je ne pouvais pas comprendre pourquoi ma boucle ne serait pas complète. App.documents.length devient plus court à chaque itération si la boucle est fermée si vous fermez le document lorsque vous avez terminé.

0

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

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES); 
lien