Domanda

Questo script seguente quasi fa quello che mi serve. Quello che sto cercando di fare è passare attraverso i documenti aperti, 139 di loro, e salvarli in formato JPEG. Tuttavia ciò che è manca è lo spostamento da un documento aperto all'altro, in modo da salvare la stessa immagine su 139 orari. Ho assunto doc.close() sarebbe chiudere il documento aperto e dare una nuova messa a fuoco, ma non è così.

Ecco il codice:

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);
    }
}
È stato utile?

Soluzione

Secondo la Adobe Photoshop CS2 JavaScript Scripting Guide sembra che è necessario assegnare alla proprietà Application.activeDocument per rendere questo documento quella attualmente selezionata per eventuali azioni. Questo ha senso dal momento che si sta utilizzando la proprietà nella funzione saveForWebPNG senza attivare in modo esplicito il documento nel iteratore nel primo blocco. Potrebbe essere semplice come la seguente modifica:

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

Tuttavia, non ho una copia di Photoshop e non hanno verificato questa soluzione.

Altri suggerimenti

So che questo è molto in ritardo, ma ho appena imbattuto in questa domanda e si sentono come potrei avere una soluzione che qualcuno lungo la strada potrebbe essere in grado di utilizzare. Quindi, qui va.

Una soluzione è quella di regolare il ciclo for. Diciamo che ci sono 5 i documenti aperti. app.documents.length sarebbe 5. Quando si chiude uno, la lunghezza è ora 4, poi 3, ecc mi sta contando come app.documents.length sta diminuendo. Quando i = 3, app.documents.length = 2. Penso che l'iterazione all'indietro farebbe il trucco.

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

+1 per soluzione di jbiz. Non riuscivo a capire perché il mio ciclo non sarebbe completa.

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 si accorcia con ogni iterazione se il ciclo se si chiude il documento quando hai finito.

Si vuole chiudere la corrente selezionata (o attivo) documento:

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top