Pregunta

Esta secuencia de comandos siguiente casi hace lo que necesito. Lo que estoy tratando de hacer es ir a través de los documentos abiertos, 139 de ellos, y guardarlas como jpeg. Sin embargo, lo que carece es pasar de un documento abierto a la otra, por lo que guarda la misma imagen más de 139 veces. Supuse doc.close() cerraría el documento abierto y dar un nuevo enfoque, pero no es así.

Aquí está el código:

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);
    }
}
¿Fue útil?

Solución

De acuerdo con la Adobe Photoshop CS2 Guía de scripts JavaScript parece que es necesario asignar a la propiedad Application.activeDocument para hacer que el documento seleccionado en ese momento por cualquier acción. Esto tiene sentido ya que está utilizando esa propiedad en la función saveForWebPNG sin activar de forma explícita el documento en el iterador en el primer bloque. Podría ser tan simple como el siguiente cambio:

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

Sin embargo, no tengo una copia de Photoshop y no ha comprobado esta solución.

Otros consejos

Sé que esto es mucho más tarde, pero me encontré con esta pregunta y la sensación como si pudiera tener una solución que alguien en el camino puede ser capaz de utilizar. Así que aquí va.

Una solución es ajustar el bucle. Digamos que hay 5 documentos abiertos. app.documents.length sería 5. Cuando se cierra una, la longitud es ahora 4, luego 3, etc. i está contando como app.documents.length está disminuyendo. Cuando i = 3, app.documents.length = 2. Pienso que la iteración hacia atrás haría el truco.

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

1 para la solución de jbiz. No podía entender por qué mi Periférico no está 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 se acorta con cada iteración a través del lazo si cierra el documento cuando haya terminado.

¿Quieres cerrar la corriente seleccionada (o activo) documento:

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top