• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Extendscript Add Used Colors / Extract used colors from the command line

Community Beginner ,
Jul 30, 2021 Jul 30, 2021

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.

TOPICS
Scripting , SDK

Views

587

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Jul 30, 2021 Jul 30, 2021

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
...

Votes

Translate

Translate
Adobe
Community Expert ,
Jul 30, 2021 Jul 30, 2021

Copy link to clipboard

Copied

you can record an Action to Add Used Colors, New Color Group, then play that action in your script.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Oct 25, 2023 Oct 25, 2023

Copy link to clipboard

Copied

Hello, sir. I have recorded an action. How should I play this action in my script?  

Thank you

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 25, 2023 Oct 25, 2023

Copy link to clipboard

Copied

check @Charu Rajput script, 

app.doScript(Action1Name, ActionSet, false);

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Oct 25, 2023 Oct 25, 2023

Copy link to clipboard

Copied

LATEST

Thank you sir

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 30, 2021 Jul 30, 2021

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;
    }
}
Best regards

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Jun 22, 2022 Jun 22, 2022

Copy link to clipboard

Copied

Hi @Charu Rajput 

I have not the knowledge to write the code myself...
Can you post a snippet for Select Same Fill color ?

Best regards

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Jun 22, 2022 Jun 22, 2022

Copy link to clipboard

Copied

This script fit my needs 🙂

https://community.adobe.com/t5/illustrator-discussions/app-executemenucommand-quot-find-fill-color-m... 

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

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines