在illustrator中,我们时常要获取一些对象的颜色值,但是一时不知道如何获取,下面我就来讲讲如何获取目标对象的颜色值。
下面以选择对象的最上层对象为例,我们通过查阅javascript编程手册,可以很容易获取下面代码:
var sel=app.activeDocument.selection[0]; //获取最上层对象
var col=sel.fillColor; //获取填充颜色
alert(col) //在屏幕输出颜色
但是,当我们把上面代码直接在illustrator运行。
得到的是下面的结果,但是这并不是我们要的,输出的是颜色的类型,不是我们要的是颜色的数值。所以我们再次查阅手册,在[CMYKColor]看到
看了资料,我们可以很容易获取对象CMYKColor的cyan, magenta, yellow, black四种颜色的值,但是对象的颜色类型只有CMYKColor一种吗?肯定不是的。查阅手册我们看到Color有8种类型:
Color
An abstract parent class for all color classes used in Illustrator. Subclasses are:
CMYKColor
GradientColor
GrayColor
LabColor
NoColor
PatternColor
RGBColor
SpotColor
好了我们对颜色有个基本的了解和认识了,我们可以写出获取颜色数值并把它包装成一个 getColorValues的函数了。
function getColorValues(color) {
switch (color.typename) {
case 'CMYKColor':
var c = color.cyan;
var m = color.magenta;
var y = color.yellow;
var k = color.black;
return [c, m, y, k];
case 'RGBColor':
var r = color.red;
var g = color.green;
var b = color.blue;
return [r, g, b, ''];
case 'GrayColor':
return ['', '', '', color.gray];
case 'SpotColor':
return getSpotColor(color.spot);
case 'PatternColor':
return ['', '', '', '', color.pattern.name];
case 'GradientColor':
return [undefined];
case 'NoColor':
return [undefined];
}
}
完整代码如下:
function getColor(){
var sel=app.activeDocument.selection[0];
var col=sel.fillColor;
alert(getColorValues(col));
}
function getColorValues(color) {
switch (color.typename) {
case 'CMYKColor':
var c = color.cyan;
var m = color.magenta;
var y = color.yellow;
var k = color.black;
return [c, m, y, k];
case 'RGBColor':
var r = color.red;
var g = color.green;
var b = color.blue;
return [r, g, b, ''];
case 'GrayColor':
return ['', '', '', color.gray];
case 'SpotColor':
return getSpotColor(color.spot);
case 'PatternColor':
return ['', '', '', '', color.pattern.name];
case 'GradientColor':
return [undefined];
case 'NoColor':
return [undefined];
}
}
getColor ();
后续,如果想要获取多个对象的颜色数值呢,可以加上下面代码:
function getColors(items) {
var colors = [];
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (item.filled) colors.push(getColorValues(item.fillColor));
if (item.stroked) colors.push(getColorValues(item.strokeColor));
}
return colors;
}