Copy link to clipboard
Copied
I'm attempting to programmatically extract colors used in an AI vector file. I see Illustrator has the Add Used Colors menu option on the swatches panel.
I'd either like to recreate this functionality or call it directly from extendscript.
Short of looping through all the pathItems in the document is there a hidden function to call this directly?
Or if there is an alternative to extracting colors used in a vector file outside of extendscript. Been searching for a fews days on this and cannot find any good solutions.
Hi,
You can do this via actions.
Try following snippet that will add used colors without traversing each path item.
addUsedColors()
function addUsedColors() {
if (app.documents.length = 0) {
return;
}
var ActionSet = "colors"
var Action1Name = "add used colors"
var ActionString = '/version 3\n/name [ 6\n' + Hexit(ActionSet) + '\n]\n/isOpen 0\n/actionCount 1\n/action-1 {\n /name [ 15\n'+ Hexit(Action1Name) + '\n ]\n /keyIndex 0\n /colorIndex 0\n /isOpen 1\n /eventCou
...
Copy link to clipboard
Copied
you can record an Action to Add Used Colors, New Color Group, then play that action in your script.
Copy link to clipboard
Copied
Hello, sir. I have recorded an action. How should I play this action in my script?
Thank you
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Thank you sir
Copy link to clipboard
Copied
Hi,
You can do this via actions.
Try following snippet that will add used colors without traversing each path item.
addUsedColors()
function addUsedColors() {
if (app.documents.length = 0) {
return;
}
var ActionSet = "colors"
var Action1Name = "add used colors"
var ActionString = '/version 3\n/name [ 6\n' + Hexit(ActionSet) + '\n]\n/isOpen 0\n/actionCount 1\n/action-1 {\n /name [ 15\n'+ Hexit(Action1Name) + '\n ]\n /keyIndex 0\n /colorIndex 0\n /isOpen 1\n /eventCount 1\n /event-1 {\n /useRulersIn1stQuadrant 0\n /internalName (ai_plugin_swatches)\n /localizedName [ 8\n 5377617463686573\n ]\n /isOpen 0\n /isOn 1\n /hasDialog 0\n /parameterCount 2\n /parameter-1 {\n /key 1835363957\n /showInPalette 4294967295\n /type (enumerated)\n /name [ 15\n 416464205573656420436f6c6f7273\n ]\n /value 9\n }\n /parameter-2 {\n /key 1634495605\n /showInPalette 4294967295\n /type (boolean)\n /value 1\n }\n }\n}';
createAction(ActionString, ActionSet);
ActionString = null;
app.doScript(Action1Name, ActionSet, false);
app.unloadAction(ActionSet, "");
function createAction(str, act) {
var f = new File("~/Desktop" + act + '.aia');
f.open('w');
f.write(str);
f.close();
app.loadAction(f);
f.remove();
}
function Hexit(str) {
var hex = '';
for (var i = 0; i < str.length; i++) {
hex += '' + str.charCodeAt(i).toString(16);
}
return hex;
}
}
Copy link to clipboard
Copied
I have not the knowledge to write the code myself...
Can you post a snippet for Select Same Fill color ?
Best regards
Copy link to clipboard
Copied
This script fit my needs 🙂
#target illustrator
function test(){
var changeColor = function (doc) {
var starterColor = doc.selection[0].fillColor;
doc.selection = null;
doc.defaultFillColor = starterColor;
app.executeMenuCommand("Find Fill Color menu item");
}
var doc = app.activeDocument;
changeColor(doc);
};
test();