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
[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
...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 )
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
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.
Thanks in advance.
Thiyagu
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.
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
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.
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
Copy link to clipboard
Copied
Marc, this is AWESOME!
Congrats!
--
tomaxxi
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
Copy link to clipboard
Copied
Marc,
This is very, very nice!
Amazing work!
Harbs
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?
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
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
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
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
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
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
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
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?
Copy link to clipboard
Copied
Theun,
Trying to make InDesign blow up on you, eh?
Harbs
Copy link to clipboard
Copied
Can make a dropdown list conditional text colors?
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
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!
// 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();
Copy link to clipboard
Copied
@Jongware
Gorgeous!
Copy link to clipboard
Copied
Hi Marc,
Thanks for your great help. Its awesome.