¿Exportar en masa todas las imágenes como archivos JPEG individuales en InDesign?

Soy nuevo en Indesign. Tengo un archivo que contiene imágenes con trazados de recorte de Photoshop. Quiero exportar todas las imágenes recortadas en una carpeta. Intenté hacer "Copiar enlaces a" y exporté con éxito las imágenes originales. Sin embargo, no quiero las imágenes originales, sino las imágenes recortadas. ¿Hay alguna forma de exportar todas las imágenes recortadas como JPEG o TIFF y no como la imagen vinculada original? En resumen, quiero exportar las imágenes sin su fondo. Espero tener sentido. Tengo alrededor de 800-1000 imágenes, por lo que agradecería mucho un método de procesamiento por lotes.

De hecho, encontré una manera de exportar las imágenes de la forma en que quiero que sean. Solo necesito hacer clic en el contenedor de la imagen (no en la imagen), ir a Archivo>Exportar y luego exportarlo como JPEG. En la ventana emergente, elijo exportar selección, calidad máxima y resolución 2400. Exporta las imágenes como yo quiero que sean. Pero tengo que hacer esto uno por uno. Solo tengo dos inquietudes:

  1. ¿Hay alguna manera de hacer esto por lotes? ¿Te gusta seleccionar todos los contenedores de imágenes y exportarlos uno por uno automáticamente?

  2. ¿Hay alguna manera de nombrar automáticamente los archivos guardados de acuerdo con el nombre de la imagen original?

¡Gracias por tu ayuda!

Actualización: Encontré este script de una de las publicaciones aquí y lo modifiqué un poco para adaptarlo a mis necesidades. Parece funcionar en la mayoría de mis documentos INDD, pero falla en otros. Me pregunto porque. A veces recibo el mensaje de error que

Cadena de error: null no es un objeto

Fuente: fileName = File ( rect.graphics[0].itemLink.filePath ).name;

También noté que omite algunos objetos y no descarga todas las imágenes. Supongo que se salta los que no están en rectángulos.

test();
function test()
{
var myDoc = app.activeDocument,
apis = myDoc.allPageItems, rect, fileName;

while ( rect = apis.pop() )
{
if ( !(rect instanceof Rectangle) || !rect.graphics[0].isValid ){ continue;}


fileName = File ( rect.graphics[0].itemLink.filePath ).name;
fileName = fileName.replace( /\.[a-z]{2,4}$/i, '.jpg' );


app.jpegExportPreferences.exportResolution = 2400;
app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.MAXIMUM;


//give it a unique name
var myFile = new File ("C:/Users/RANFacistol-Mata/Desktop/Image Trial/"+ fileName);


rect.exportFile(ExportFormat.JPG, myFile);
}
}

¿Hay alguna manera de modificar este script de modo que, en lugar de iterar a través de todos los rectángulos, itere a través de todos los objetos, como si hiciera clic en el siguiente botón?

Y luego verifique si ese objeto contiene una imagen (jpg, tiff, psd, ai, eps). Si es así, lo exportaré como se indica arriba.

¡Gracias por tu ayuda!

Respuestas (3)

Gracias por tus aportes. Combiné todas las respuestas que obtuve de todos los diferentes foros a los que pedí ayuda y finalmente se me ocurrió un script que itera solo a través de las imágenes vinculadas y no tiene en cuenta si el contenedor es un rectángulo, un polígono o lo que sea. También agregué un contador para que las imágenes no se sobrescriban en caso de que los nombres sean los mismos.

var myDoc = app.activeDocument,
apis = myDoc.links.everyItem().getElements(), items, fileName;
var i = 0;

while ( items = apis.pop() )
{
    items = items.parent.parent;  
    if ( !(items.hasOwnProperty ("graphics") )){ continue; }
    i++;
    try{
        fileName = File ( items.graphics[0].itemLink.filePath ).name;
        fileName =  i + "_" + fileName.replace( /\.[a-z]{2,4}$/i, '.jpg' );
    }catch(e){};

    app.jpegExportPreferences.exportResolution = 2400;
    app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.MAXIMUM;

    //give it a unique name
    var myFile = new File ("Mypath"+ fileName);

    items.exportFile(ExportFormat.JPG, myFile);
}

Sí, para verificar todos los elementos de la página en busca de imágenes, no solo los rectángulos, solo necesita eliminar la !(rect instanceof Rectangle)parte. Y mientras estás en eso, también cambia el nombre de la variable de rect a algo como pageItem, para que describa lo que realmente contiene. Entonces su script debería verse así:

var myDoc = app.activeDocument,
apis = myDoc.allPageItems, pageItem, fileName;

while ( pageItem = apis.pop() ) {
  if ( !pageItem.graphics[0].isValid ){ continue;}

  fileName = File ( pageItem.graphics[0].itemLink.filePath ).name;
  fileName = fileName.replace( /\.[a-z]{2,4}$/i, '.jpg' );

  app.jpegExportPreferences.exportResolution = 2400;
  app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.MAXIMUM;

  //give it a unique name
  var myFile = new File ("C:/Users/RANFacistol-Mata/Desktop/Image Trial/"+ fileName);


  pageItem.exportFile(ExportFormat.JPG, myFile);
}

Reemplazar

if ( !(rect instanceof Rectangle) || !rect.graphics[0].isValid ){ continue;}

por

if ( !(rect instanceof Rectangle) && !(rect instanceof Oval) && !(rect instanceof Polygon)|| !rect.graphics[0].isValid ){ continue;}

Tenga en cuenta que si tiene el mismo gráfico importado varias veces, la última aparición de este gráfico reemplazará a todos los demás.