htmledit_views">
在illustrator中,我们时常要获取一些对象的颜色值,但是一时不知道如何获取,下面我就来讲讲如何获取目标对象的颜色值。
下面以选择对象的最上层对象为例,我们通过查阅html" title=javascript>javascript编程手册,可以很容易获取下面代码:
html" title=javascript>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的函数了。
html" title=javascript>javascript">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];}
}
完整代码如下:
html" title=javascript>javascript">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 ();
后续,如果想要获取多个对象的颜色数值呢,可以加上下面代码:
html" title=javascript>javascript">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;
}