Search code examples
javascriptadobe-indesignextendscript

How to change color swatch of colored greyscale pictures using ExtendScript in InDesign?


I've got the following problem/situation:

  • 12-page document (ID CC 2015)
  • one frame with a greyscale picture per page
  • the pictures are colored with the same color swatch (e.g. "universal") on all pages (white arrow, applied color swatch)

What I want to do now, is to write a script to color every picture with a different color swatch, e.g. the picture on page 1 with color swatch "1", the picture on page 2 with color swatch "2" etc. But I don't know how to access the picture itself (instead of the frame) and change its color. Is this even possible?

Thanks in advance.


Solution

  • This should do the trick. It currently sets random color for the images and only looks for rectangles. You could use

    page.allPageItems
    

    instead. (if you also have images in ovals or polygons)

    // the main function
    var main = function() {
      var doc = app.activeDocument; // get the current document
      // loop the pages
      for (var i = 0; i < doc.pages.length; i++) { 
        var page = doc.pages[i]; // isolate the page
        // loop all rectangles
        for(var j = 0; j < page.rectangles.length;j++){
          var rect = page.rectangles[j]; // isolate a rectangle
          // test if there is an image inside
          if(rect.images.length > 0){
            var image = rect.images[0]; // isolate the image
            // asign a random color from th swatches
            image.fillColor = doc.swatches[Math.floor(Math.random()* doc.swatches.length -1)];
          } // end if image
        } // end loop j rectangles
      } // end loop i pages
    } // end of main
    main(); // run it