Skip to main content
Inspiring
March 14, 2017
Answered

Mass export all images as individual JPEGs?

  • March 14, 2017
  • 3 replies
  • 12110 views

Hi! I am new to Indesign. I have a file that contains images with Photoshop clipping paths. I want to export all the clipped images in a folder. I have tried doing the "Copy Links To" and it successfully exported the original images. However, I do not want the original images but the clipped images instead. Is there a way for me to export all the clipped images as JPEG or TIFF and not the original linked image? In short, I want to export the images without their background. I hope I'm making sense. I have about 800-1000 images so a batch processing method would be highly appreciated.

I actually found a way to export the images the way I want them to be. I just need to click the image container (not the image), go to File>Export and then export it as JPEG. In the pop up window, I choose export selection, maximum quality, and 2400 resolution. It exports the images the way I want them to be. But I have to do this one by one. I just have two concerns:

1. Is there a way for me to do this by batch? Like select all the image containers and export them one by one automatically?

2. Is there a way to automatically name the saved files according to the original image name?

Thank you for your help!

Correct answer Jump_Over

Hi,

I suggest to iterate through links instead of objects ==> so no link means no action

starting part of code:

var

    myDoc = app.activeDocument,

    apis = myDoc.links.everyItem().getElements(),

    rect, fileName;

while ( rect = apis.pop() )

{

    rect = rect.parent.parent;

    if ( !(rect.hasOwnProperty ("graphics") ){ continue; }

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

//.....

Jarek

3 replies

Community Expert
February 23, 2021

Laura said: "The script works but it exports the files with the same extension, I'd like them to be all converted to jpg, is that possible?"

 

Hi Laura,

I'd think something is wrong with your code.

Please post the full code you are currently using.

 

Format it with the forum editor's "Insert/Edit code sample" controls that look like that: </>

Chose JavaScript as language.

 

Thanks,
Uwe Laubender

( ACP )

lauras86935790
Participating Frequently
February 24, 2021

Thanks Uwe,

I made another attempt this morning and now it works! (I think I mistakenly deleted one line of code). Also, there was a missing ")" at the end of line 21.

I am now using this and it works, in case anyone needs it I'll just copy it here.

Have a nice day!

Laura

test();

function test()

{

var

    myDoc = app.activeDocument,

    apis = myDoc.links.everyItem().getElements(),

    rect, fileName;

while ( rect = apis.pop() )

{

    rect = rect.parent.parent;

    if ( !(rect.hasOwnProperty ("graphics") ))
    { 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/Laura/Desktop/_IMG OUT/"+ fileName);

    rect.exportFile(ExportFormat.JPG, myFile);

}

}

 

schroef
Inspiring
January 30, 2018

Is there a method for rachellefacistolmata script to export the image but take the orginal linked image into account. Now it exports a JPG using the frames ratio.

Not sure if this is clear, ive added some screengrabs to make it more clear

Placed image

exported image

Original linked image

My guess its due to the "

rect = rect.parent.parent;

if (!(rect.hasOwnProperty("graphics"))) {

"

Jump_Over
Legend
February 3, 2018

Hi,

In other words - is your goal to rename/change directory of original file instead of export?

if so there is a method:

oldFile.copy(newFile);

Jarek

schroef
Inspiring
February 3, 2018

@Jarek,

Not sure if you directed it at me. But i asked this question on StacjExchange as well and good help there. The script now exports the image and not images in form of the rectangle. I didnt even know that wa possible, exporting the shape from indesign?

Anyways here's the script if other would perhaps need it or change it. Better take out those alerts, perhaps the done can stay but the other is sort of useless

var myDoc = app.activeDocument,
  apis
= myDoc.links.everyItem().getElements(),
  items
, fileName;
var i = 0;
var MyPath = "C:/Users/xx/Desktop/test/"; // change your path here

alert
("Script is running. Press OK and wait until done...");

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
.graphics[0].exportFile(ExportFormat.JPG, myFile);
}

alert
("Done");

Inspiring
March 14, 2017

I found this script in another forum and modified it a bit to suit my needs. It appears to work in most of my INDD documents, but it fails in others. I wonder why. I get the error message that

Error string: null is not an object

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

I also noticed that it skips some objects and doesn't download all of the images.

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

}

}

Is there a way for me to modify this script such that instead of iterating through all the rectangles, I would iterate through all the objects instead, much like clicking this icon.

And then check if that object contains an image. If it does, then I will export it as scripted above.
Thanks!

Jump_Over
Jump_OverCorrect answer
Legend
March 14, 2017

Hi,

I suggest to iterate through links instead of objects ==> so no link means no action

starting part of code:

var

    myDoc = app.activeDocument,

    apis = myDoc.links.everyItem().getElements(),

    rect, fileName;

while ( rect = apis.pop() )

{

    rect = rect.parent.parent;

    if ( !(rect.hasOwnProperty ("graphics") ){ continue; }

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

//.....

Jarek

Inspiring
March 14, 2017

Hello Jarek,
Thank you for this suggestion. You're right. It's actually more efficient to iterate through the links than through the objects. However, I have one more concern. Not all of my linked images are in a rectangle. Some of them are in polygons, and some are in arbitrary shapes (like the edges have been followed). Can you suggest a way for me to catch those instances too?
Thanks!