Copy link to clipboard
Copied
Not sure this landed on the right place. Where is the scripting part of the forum? Was it deleted? All that work...
(This post is not a question.)
Below you will find a sample script for exporting LAB color swatches from InDesign. InDesign seem to have difficulties keeping thousands of swatches in its palette, so take care. A variant of this script made for Illustrator or Photoshop would probably have been a better idea.
/*
Script for exporting LAB colours from InDesign Swatches.
Number, Name, L, A, and B columns semi colon separated.
By Andreas Jansson, Code Combinations AB, Sweden, 2019.
Description:
First import a library of Pantone Colours so that they are present in the swatches palette of InDesign (you can export swatches from Photoshop, to an ASE file that is importable in InDesign).
Then alter the path below to a folder of your choice and run this script with InDesign.
The resulting file, I pasted into Excel.
*/
var result = '';
for (var i = 0; i <= app.swatches.length-1; i++){
var currentSwatch = app.swatches[i];
if (currentSwatch.hasOwnProperty('space') && currentSwatch.space == ColorSpace.LAB){
var val = currentSwatch.colorValue;
result += i.toString() + ';' + currentSwatch.name + ';' + val[0] + ';' + val[1] + ';' + val[2] + '\r\n';
}
}
result = 'N:o;Name;Lightness;A;B' + '\r\n' + result;
var outPath = 'C:/temp/test/out.txt'; // Put an existing path here
alert(writeToFile (result, outPath));
function writeToFile(fileContents, destinationFilePath){
var myFileOut = new File(destinationFilePath);
myFileOut.open('w');
// myFileOut.encoding = 'UTF-8';
myFileOut.write(fileContents);
myFileOut.close();
return new File(destinationFilePath).fsName;
}
Copy link to clipboard
Copied
Good Day Everyone,
I am a new Adobe Photoshop and InDesign user and am looking for some help or direction. I need to import a color library using the color name and L a b values for a set of colors into my inDesign Swatch Library. Does anyone know of an available script to do this? I saw a post from Mark that had the formatted spreadsheet to do this and it had the MacOS script but not the PC javascript. The requestor was using a Mac. If anyone could point me in the right direction or suggest a script to do this on my PC it would be greatly appreciated. My data is in the following format in excel.
Thank you!
NAME | L* | a* | b* |
SWATCH 1 | 50.00 | -30.00 | 20.00 |
SWATCH 2 | 53.00 | -32.00 | 21.00 |
SWATCH 3 | 56.00 | -34.00 | 22.00 |
SWATCH 4 | 59.00 | -36.00 | 23.00 |
Copy link to clipboard
Copied
Hi @ColorDyeingMan2021 Save your csv named LabColors.csv to the desktop, and try this:
var path = File(Folder.desktop + "/LabColors.csv");
var cTable = readFile(path);
//split the table into an array of rows
var r = cTable.split("\n");
var doc = app.activeDocument;
var c, ns;
for (var i = 1; i < r.length-1; i++){
//split the row into an array of cells
c = r[i].split(",");
ns = makeSwatch(doc, c[0]);
ns.model = ColorModel.PROCESS;
ns.space = ColorSpace.LAB;
ns.colorValue = [Number(c[1]),Number(c[2]),Number(c[3])]
};
/**
* Read a text file
* @param the file’s path
* @return the file’s contents
*
*/
function readFile(p) {
var f = new File(p);
f.open("r");
var x = f.read();
f.close();
return x;
}
/**
* Makes a new swatch
* @param the document to add the swatch to
* @param swatch name
* @return the new or existingswatch
*
*/
function makeSwatch(d, n){
var s;
try {
d.colors.add({name:n});
}catch(e) {
s = d.colors.itemByName(n);
}
return d.colors.itemByName(n);
}
Also, if the color channels are evenly incremented you wouldn’t need to load a spreadsheet—you should be able to increment the values in a loop
Copy link to clipboard
Copied
Hi rob day,
Thank you so much. I am not a programmer but was able to get the jsx file created (after a couple of tries and an error) and added as a script in InDesign and to try on the stored csv. Success!!! The colors and data values look great. I really appreciate this. One more question. If I wanted to store the swatches to a specific swatch library can /could I do that using this script? Or is this something I would do post importing? I want to be able to save a color library and share as an ASE file eventually. I will look for more details on managing libraries and see if I can figure that out.
Again, thank you.This is gonna save me hours of time.
Copy link to clipboard
Copied
Unless something has changed with the new ID version, Libraries are not scriptable, and I don’t think there is a way to add an .ase file to a Library, but it’s easy to select the swaches and save an .ASE after you run the script.
You could make a matrix of rectangles filled with the Lab colors, and add that to the Library as a Graphic. If the user dragged the matrix graphic on the a document, the fill colors would be added to the Swatches panel, but an .ase seems simpler.
Copy link to clipboard
Copied
Thank you for the advice. The graphic is an interesting idea.
Copy link to clipboard
Copied
This version creates a group of rectangles in the upper left corner of page 1, with the new Lab swatches as fills. If you drag the group into the CC Library, make a new document, and drag the library group on to the new doc the swatches should get added:
var path = File(Folder.desktop + "/LabColors.csv");
var cTable = readFile(path);
//split the table into an array of rows
var r = cTable.split("\n");
var doc = app.activeDocument;
app.scriptPreferences.measurementUnit = MeasurementUnits.INCHES
var sArray = []
var c, ns, sr;
for (var i = 1; i < r.length; i++){
//split the row into an array of cells
c = r[i].split(",");
try {
ns = makeSwatch(doc, c[0]);
ns.model = ColorModel.PROCESS;
ns.space = ColorSpace.LAB;
ns.colorValue = [Number(c[1]),Number(c[2]),Number(c[3])]
}catch(e) {}
sr = doc.pages[0].rectangles.add({geometricBounds:[0, 0, 2, 2], fillColor:ns.name});
sArray.push(sr)
};
//makes a group of rectangles with the new swatch fills
var sGroup = doc.pages[0].groups.add(sArray);
sGroup.name = "LabSwatches"
/**
* Read a text file
* the file’s path
* the file’s contents
*
*/
function readFile(p) {
var f = new File(p);
f.open("r");
var x = f.read();
f.close();
return x;
}
/**
* Makes a new swatch
* the document to add the swatch to
* swatch name
* the new or existingswatch
*
*/
function makeSwatch(d, n){
var s;
try {
d.colors.add({name:n});
}catch(e) {
s = d.colors.itemByName(n);
}
return d.colors.itemByName(n);
}
Copy link to clipboard
Copied
Hi,
creating ase files via script is possible
app.saveSwatches()
https://www.indesignjs.de/extendscriptAPI/indesign-latest/#Application.html#d1e42253__d1e48249
But CC libraries not, true. The old-style library files on the other hand would be...
Copy link to clipboard
Copied
Thanks Jens, I was assuming @ColorDyeingMan2021 was looking for a way to distribute .ase files via a CCLibraries invite, but I don’t see a way to add .ase files to a CC or regular Library via scripting or the UI.
Another option might be to save the .ase files to a folder inside of the local Creative Cloud Files folder and share the ase folder with a group of users. In that case the .ase files would sync to the group’s computers as they are created.