get swatches in dropdown list with color preview...

Community Beginner ,
Jan 19, 2011 Jan 19, 2011

Copy link to clipboard

Copied

Hi experts,

I am creating one gui for swatches related automation task in CS4 using javascript. Is it possible to get swatches in dropdown list with its color preview? Same like colors in Swatches palette.

Your help will be much appreciated. Thanks in advance.

Thiyagu

TOPICS
Scripting

Views

13.3K

Likes

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 2 Correct answers

Guide , Jan 25, 2011 Jan 25, 2011

[Jongware] wrote:

You can create custom images to be shown in a drop-down list, but they have to exist in advance.

Actually they don't have to. I found that ScriptUI supports string-encoded image files. So you can inject PNG or JPEG images in you widgets w/o having to create real underlying files. Of course, this implies that we generate data on the fly with respect to the image format specification.

In the script below, I will use the PNG approach — http://www.w3.org/TR/PNG/

So, here is my first at

...

Likes

Translate

Translate
Community Expert , Feb 09, 2022 Feb 09, 2022

Hi  Mathias,

see Marc's original code at his own website:

 

InDesign Scripting Forum: 25 ‘sticky’ posts [roundup]
Marc Autret, March 07, 2011
Get Swatches in DropDownList with Color Preview

https://www.indiscripts.com/post/2011/03/indesign-scripting-forum-25-sticky-posts#hd4sb1

 

Regards,
Uwe Laubender

( ACP )

Likes

Translate

Translate
Contributor ,
Jan 20, 2011 Jan 20, 2011

Copy link to clipboard

Copied

Dear Thiyagu

for droplist thy this code

var w = new Window ("dialog");

var swatches=app.swatches.everyItem().name;

var preset_list = w.add ("dropdownlist", undefined, swatches);

w.orientation = "row";

w.add ("button", undefined, "OK");

w.add ("button", undefined, "Cancel");

w.show ();

Mi_D

Likes

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 ,
Jan 23, 2011 Jan 23, 2011

Copy link to clipboard

Copied

Hi Mi_D,

Thanks for your reply.

I am able to create the dropdownlist with the swatch names.

But I want the swatches name in the dropdownlist along with its color preview as displayed below.

Picture 2.png

Thanks in advance.

Thiyagu

Likes

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 ,
Jan 20, 2011 Jan 20, 2011

Copy link to clipboard

Copied

I think what you want is possible, but very complicated to achieve.

You can add ScriptIUIImages to the ListItems in the dropdown menu.

It might be possible to generate ScriptUIImages at run time from the swatches, but I suspect that would be quite complicated to do.

Another possibility is to have the swatch colour as the background of the listItem with ScriptUIBrush.

You will need find out how to extract the RGB values from the swatches. That is not straightforward.

Likes

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 ,
Jan 23, 2011 Jan 23, 2011

Copy link to clipboard

Copied

Hi,

Thanks for your comments.

Is this only possible through plug-ins? Or we can create this type of dropdownlist through script dialog also?

Thanks in advance

Thiyagu

Likes

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
Advocate ,
Jan 24, 2011 Jan 24, 2011

Copy link to clipboard

Copied

You can create custom images to be shown in a drop-down list, but they have to exist in advance.

As far as I know, there is no immediate control to create swatch images automatically. It should be remotely possible to create them on request (using RGB colors provided by InDesign), but unfortunately the image types that are accepted by ScriptUI are all of the complicated type -- PNG, JPEG. I don't know what that 3rd type is: IDRC; perhaps that's a possibility, I dunno.

See Peter Kahrel's ScriptUI for Dummies for more information on using images in ScriptUI.

Likes

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
Guide ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

[Jongware] wrote:

You can create custom images to be shown in a drop-down list, but they have to exist in advance.

Actually they don't have to. I found that ScriptUI supports string-encoded image files. So you can inject PNG or JPEG images in you widgets w/o having to create real underlying files. Of course, this implies that we generate data on the fly with respect to the image format specification.

In the script below, I will use the PNG approach — http://www.w3.org/TR/PNG/

So, here is my first attempt to address dhishok's question:

// PNG-String Generator (=> 13X13 pixels)
//----------------------------------------------------------
var pngSwatch = (function()
{
     // Table of CRCs of 8-bit messages
     var CRC_256 = [0, 0x77073096, 0xee0e612c, 0x990951ba, 0x76dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0xedb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x9b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x1db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x6b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0xf00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x86d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x3b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x4db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0xd6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0xa00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x26d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x5005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0xcb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0xbdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d];
     
     // PNG Cyclic Redundancy Code algorithm -- http://www.w3.org/TR/PNG/#D-CRCAppendix
     var crc32 = function(/*uint[]*/buf)
          {
          var c = 0xffffffff >>> 0,
               n = buf.length >>> 0,
               i;
          for( i=0 ; i < n ; ++i )
               c = CRC_256[( ( c>>>0 ) ^ buf) & 0xff] ^ (c >>> 8);
     
          return (c ^ 0xffffffff)>>>0;
          };

     var PNG_PROLOG = "\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\r\x00\x00\x00\r\b\x03\x00\x00\x00E5\x14N\x00\x00\x00\x06",
          PNG_EPILOG = "\x00\x00\x00\x16IDATx\xDAb`D\x06\f\x8C\f\b0\xC8x\xC8\x00 \xC0\x00\x11\xC6\x001{U\x93\xB6\x00\x00\x00\x00IEND\xAEB`\x82";

     return function(/*uint[3]*/rgb)
          {
          var buf = [0x50,0x4C,0x54,0x45, rgb[0], rgb[1], rgb[2], 0, 0, 0],
               crc = crc32(buf),
               i, r;
          
          buf = buf.concat([ (crc>>>24)&0xFF, (crc>>>16)&0xFF, (crc>>>8)&0xFF, (crc>>>0)&0xFF ]);
          i = buf.length;
          while( i-- )
               buf = String.fromCharCode(buf);
          
          r = PNG_PROLOG + buf.join('') + PNG_EPILOG;
          
          buf.length = 0;
          buf = null;
          return r;
          };
})();

// Parse the app|doc Swatches (supports CMYK and RGB)
//----------------------------------------------------------
var CMYK = ColorSpace.CMYK,
     RGB = ColorSpace.RGB,
     LAB = ColorSpace.LAB;

var PROCESS = ColorModel.PROCESS;

var     target = (app.documents.length&&app.activeDocument)||app,
     swatches = target.swatches.everyItem().getElements(),
     n = swatches.length,
     color, rgbValues,
     colors = [],
     i, t;

for( i=n-1 ; i>=0 ; i-- )
     {
     color = swatches;
     rgbValues = false;

     if( !(swatches instanceof Color) ) continue;
     color = color.getElements()[0];

     switch( color.space )
          {
          case CMYK:
               if( color.model != PROCESS ) break;
               if( 'Black' == color.name )
                    {
                    rgbValues = [0,0,0];
                    break;
                    }
                    
               // backup cmyk
               t = color.colorValue;
               // convert cmyk to rvb
               color.space = RGB;
               rgbValues = color.colorValue;
               // revert to cmyk
               color.space = CMYK;
               color.colorValue = t;
               break;
          case RGB:
               rgbValues = color.colorValue;
               break;
          case LAB:
               // todo!
               break;
          default:
               ;
          }

     if( false !== rgbValues )
          colors.unshift( {name:color.name, png: pngSwatch(rgbValues)} );
     }

// UI
//----------------------------------------------------------
var w = new Window("dialog", "See Your Swatches!"),
     ddl = w.add("dropdownlist");
n = colors.length;
for( i=0 ; i < n ; ++i )
     (ddl.add('item', "\xa0"+colors.name)).image = colors.png;
ddl.selection = 0;
w.show();

@+

Marc

Likes

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
Advisor ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Marc, this is AWESOME!

Congrats!

--

tomaxxi

Likes

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
Advisor ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Hey, I just replaced "// todo!" with this:

// backup lab
t = color.colorValue;
// convert lab to rvb
color.space = RGB;
rgbValues = color.colorValue;
// revert to lab
color.space = LAB;
color.colorValue = t;

And it worked!

Thanks Marc!

--

tomaxxi

Likes

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
LEGEND ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Marc,

This is very, very nice!

Amazing work!

Harbs

Likes

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
Advocate ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Marc, nice info about the live-injecting. That's really useful, since -- if I understand it correctly -- this means you don't have to do the no-file-then-write-it trick. Correct?

As for, uh, actually generating a PNG on the fly ... it's one of those things I considered theoretically possible, but it's a while I last checked out the PNG specs and I couldn't remember if it had a non-compressed sub-format. Seems you circumvented that one nicely. Sweet, sweet job, man.

.. I take it no-one really knows what that IDRC is?

Likes

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
LEGEND ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

[Jongware] wrote:

.. I take it no-one really knows what that IDRC is?

That should be InDesign Resources (the images available to plugins). Whether there are any really available to Script UI is anyone's guess...

Marc: are you interested in finding them?

Harbs

Likes

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
Advisor ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

You can use IDRC directly in ScriptUI, but finding them is little hard job because folder structure is different on Mac and PC platform. Do you maybe have a solution?

--

tomaxxi

Likes

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
LEGEND ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Yes. IDRC files are png files.

Maybe I'm reading too much into it, but I'm assuming that the third type is not a file, but rather an internal reference. IDRC files are loaded into InDesign, and can be addressed by plugins directly (not necessarily by accessing the files). Maybe there's some way to use the built-in IDRC references (by specifying a valid resource name?)...

I'll see what I can find out...

Harbs

Likes

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
LEGEND ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

I don't need to find out. I already knew this answer once upon a time. Too much stuff falling out of my head...

Yes. You can use named icons in Script UI, but only if the application defines them. I believe that Photoshop is the only app which defines named icon resources for Script UI.

It would be nice if InDesign did that for us, but I can think of better uses for the InDesign engineers...

Harbs

Likes

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
Guide ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Harbs. wrote:

That should be InDesign Resources (the images available to plugins). Whether there are any really available to Script UI is anyone's guess...

Marc: are you interested in finding them?

I think Peter reveals where IDRC are located in the Dummies guide. But, anyway, I already grabbed all ID icons in my own folders 😉

(And I confirm that IDRC are just PNG.)

I also noticed that ScriptUIImage's icon property supports "system resource name," such as "SystemWarningIcon", but I couldn't find out an exhaustive list of these special strings... Maybe someone here would have more details on this subject (?)

@+

Marc

Likes

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
LEGEND ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Marc Autret wrote:


I think Peter reveals where IDRC are located in the Dummies guide. But, anyway, I already grabbed all ID icons in my own folders 😉

(And I confirm that IDRC are just PNG.)

Yeah. I have a folder of al the icons as well.

I also noticed that ScriptUIImage's icon property supports "system resource name," such as "SystemWarningIcon", but I couldn't find out an exhaustive list of these special strings... Maybe someone here would have more details on this subject (?)

That's what I was referring to when I was talking about the named icons (I'm pretty tired...). The info I got from someone who should know what he's talking about was that InDesign doesn't define them (but Photoshop does).

Harbs

Likes

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 ,
Jan 30, 2011 Jan 30, 2011

Copy link to clipboard

Copied

> I think Peter reveals where IDRC are located in the Dummies guide.

Correct, but I forgot to give a link to an icon catalogue. It's here: http://www.kahrel.plus.com/indesign/icon_catalogue.pdf

Peter

Likes

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
Advocate ,
Jan 30, 2011 Jan 30, 2011

Copy link to clipboard

Copied

Are these icons actually used in CS5? If I don't like them and chance one, does that reflect in the program?

Hah hah -- if so, what if I write a PNG editor script to change them from within a running InDesign?

Likes

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
LEGEND ,
Jan 30, 2011 Jan 30, 2011

Copy link to clipboard

Copied

Theun,

Trying to make InDesign blow up on you, eh?

Harbs

Likes

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
Guest
May 08, 2014 May 08, 2014

Copy link to clipboard

Copied

Can make a dropdown list conditional text colors?

Likes

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
Advisor ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Well, IDRC is PNG

Try renaming IDRC to PNG and you will be able to see it

You can also use IDRC in ScriptUI!

--

tomaxxi

Likes

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
Advocate ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

Okay, thanks guys. By the way: I *guessed* at what Marc is doing here (hint: save one of the swatches & look at the file's properties) and, well, why stop here? Round swatches & my personal Stamp of Approval!

Screen shot 2011-01-25 at 10.29.19 PM.png

// PNG-String Generator (=> 13X13 pixels)

//----------------------------------------------------------

var pngSwatch = (function()

{

     // Table of CRCs of 8-bit messages

     var CRC_256 = [0, 0x77073096, 0xee0e612c, 0x990951ba, 0x76dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0xedb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x9b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x1db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x6b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0xf00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x86d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x3b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x4db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0xd6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0xa00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x26d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x5005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0xcb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0xbdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d];

     // PNG Cyclic Redundancy Code algorithm -- http://www.w3.org/TR/PNG/#D-CRCAppendix

     var crc32 = function(/*uint[]*/buf)

          {

          var c = 0xffffffff >>> 0,

               n = buf.length >>> 0,

               i;

          for( i=0 ; i < n ; ++i )

               c = CRC_256[( ( c>>>0 ) ^ buf) & 0xff] ^ (c >>> 8);

          return (c ^ 0xffffffff)>>>0;

          };

     var PNG_PROLOG = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x0D\x00\x00\x00\x0D\x08\x03\x00\x00\x00\x45\x35\x14\x4E\x00\x00\x00\x09",

          PNG_EPILOG = "\x00\x00\x00\x03\x74\x52\x4E\x53\xFF\xFF\x00\xD7\xCA\x0D\x41\x00\x00\x00\x2C\x49\x44\x41\x54\x78\xDA\x62\x60\x02\x02\x06\x10\x00\x33\x40\x6C\x46\x10\x00\xF1\x19\x98\x20\x6C\x30\x1F\x9D\x87\xE0\x80\x14\x93\xCB\xC3\x67\x03\x9A\x5B\x90\xDD\x09\x10\x60\x00\x3B\x5D\x00\xA6\x23\x15\xD4\x84\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82";

     return function(/*uint[3]*/rgb)

          {

          var buf = [0x50,0x4C,0x54,0x45, 0,0,0, rgb[0], rgb[1], rgb[2], 0xff, 0xff, 0xff],

               crc = crc32(buf),

               i, r;

          buf = buf.concat([ (crc>>>24)&0xFF, (crc>>>16)&0xFF, (crc>>>8)&0xFF, (crc>>>0)&0xFF ]);

          i = buf.length;

          while( i-- )

               buf = String.fromCharCode(buf);

          r = PNG_PROLOG + buf.join('') + PNG_EPILOG;

          buf.length = 0;

          buf = null;

          return r;

          };

})();

// Parse the app|doc Swatches (supports CMYK and RGB)

//----------------------------------------------------------

var CMYK = ColorSpace.CMYK,

     RGB = ColorSpace.RGB,

     LAB = ColorSpace.LAB;

var PROCESS = ColorModel.PROCESS;

var     target = (app.documents.length&&app.activeDocument)||app,

     swatches = target.swatches.everyItem().getElements(),

     n = swatches.length,

     color, rgbValues,

     colors = [],

     i, t;

for( i=n-1 ; i>=0 ; i-- )

     {

     color = swatches;

     rgbValues = false;

     if( !(swatches instanceof Color) ) continue;

     color = color.getElements()[0];

     switch( color.space )

          {

          case CMYK:

               if( color.model != PROCESS ) break;

               if( 'Black' == color.name )

                    {

                    rgbValues = [0,0,0];

                    break;

                    }

               // backup cmyk

               t = color.colorValue;

               // convert cmyk to rvb

               color.space = RGB;

               rgbValues = color.colorValue;

               // revert to cmyk

               color.space = CMYK;

               color.colorValue = t;

               break;

          case RGB:

               rgbValues = color.colorValue;

               break;

          case LAB:

                    // backup lab

                    t = color.colorValue;

                    // convert lab to rvb

                    color.space = RGB;

                    rgbValues = color.colorValue;

                    // revert to lab

                    color.space = LAB;

                    color.colorValue = t;

                    break;

          default:

               ;

          }

     if( false !== rgbValues )

          colors.unshift( {name:color.name, png: pngSwatch(rgbValues)} );

     }

// UI

//----------------------------------------------------------

var w = new Window("dialog", "See Your Swatches!");

w.orientation = 'row';

i = w.add ('image', undefined),

ddl = w.add("dropdownlist");

i.image = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\x9A\x9C\x18\x00\x00\x00\x9B\x49\x44\x41\x54\x38\x11\xA5\x93\xE1\x0E\xC0\x10\x0C\x84\x75\xEF\xED\x8F\x47\xF3\x62\xE6\x6A\x95\x8B\x28\x32\x97\x2C\x5A\xDA\xCF\x69\x32\x29\x55\xE1\x42\xCF\x45\x6F\x6F\x2D\x29\x25\xB8\xD0\x35\xE7\xAC\x31\x72\x7C\x9F\xC3\xBE\x37\xE6\xAD\xA2\x3D\x43\x01\x5C\x80\x18\x62\xD8\x98\x4F\x9F\x50\x1D\xD5\x9E\x33\x4D\x01\x31\x46\xED\x16\x11\x5D\x9B\x89\x10\x2C\x67\xF4\x14\xC0\x05\x5E\x6C\x50\x17\x70\xFA\x0C\x17\xC0\x37\xCF\xAC\xDB\xB9\x0B\xE0\x39\x98\x5D\x6B\xE2\xD5\x05\x70\x11\x62\x83\xC0\x8D\xC5\xD8\x5F\x02\x4E\xE6\xB0\x04\xE0\x86\x9D\x96\x00\xCC\x81\xED\x22\xE6\x5C\xE1\x75\x43\x85\xFF\xE1\x8F\x04\x4D\x3B\x9B\xAB\xF3\x17\xEE\x89\xAB\xE2\xA0\x2A\x38\x8A\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82";

n = colors.length;

for( i=0 ; i < n ; ++i )

     (ddl.add('item', "\xa0"+colors.name)).image = colors.png;

ddl.selection = 0;

w.show();

Likes

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
Guide ,
Jan 25, 2011 Jan 25, 2011

Copy link to clipboard

Copied

@Jongware

Gorgeous!

Likes

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 ,
Jan 26, 2011 Jan 26, 2011

Copy link to clipboard

Copied

Hi Marc,

Thanks for your great help. Its awesome.

Likes

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