使用extendscript更改对象的颜色

时间:2014-07-23 11:58:20

标签: javascript scripting adobe-illustrator extendscript

我环顾四周,找不到任何可以做的事情,所以我想我可能会问错误的问题。

我在插图画家的页面上有一系列对象,其特定的RGB颜色,比如它的255红色。我想选择具有此颜色的项目或循环查看项目是否为此颜色并将其更改为CMYK颜色,例如75%灰色

它完成了此操作,但它始终选择要更改的项目

var currPageItem=app.activeDocument.activeLayer;
var myColour = new RGBColor("255,0,0")//initial default colour
var myGrey= new CMYKColor("0,0,0,75")//initial default grey


// Stepping through each item on the layer.
for (var i = 0; i < currPageItem.pageItems.length; i++) {
    var currentItem = currPageItem.pageItems[i];
    //$.writeln("Object name=", currentItem);
    if (currentItem.RGBColor=myColour) {
           $.writeln("Colour function",i);
           };

}

我希望能够改变笔触颜色。任何帮助真的很感激,非常坚持这个

3 个答案:

答案 0 :(得分:2)

感谢你把我放在正确的方向乔希。我想我现在已经得到了它。首先,文件菜单下的文档颜色模式必须设置为RGB。如果没有这样做,那么当脚本读取页面项时,它会将它们检查为CMYK,因此不会识别任何RGB值。

它还会将值检查到数十亿个小数位,因此这些需要四舍五入。做了以下调整,这似乎工作。任何其他改进最受欢迎

var layer = app.activeDocument.activeLayer;
var testColor = new RGBColor()//initial default colour
testColor.red = 180;
testColor.green = 93;
testColor.blue = 120;
var myGrey= new CMYKColor()//initial default grey
myGrey.black=75;


// Stepping through each item on the layer.
for (var i = 0; i < layer.pathItems.length; i++) {
    var item = layer.pathItems[i];
    $.writeln("Test colour ",Math.round( item.fillColor.red))
    if (Math.round(item.fillColor.red) == testColor.red &&
    Math.round(item.fillColor.green)== testColor.green &&
    Math.round(item.fillColor.blue) == testColor.blue)
   {
      $.writeln("Color function",i );
      item.fillColor = myGrey;
   }

}

答案 1 :(得分:1)

使用类似的东西进行印前工作。 我改编了上面的RGB版本,只将所有浓黑色转换为K.仍在尝试使用颜色值,并添加一种方法来检查笔触颜色。 谢谢!正在寻找解决方案很长一段时间。

&#13;
&#13;
var layer = app.activeDocument.activeLayer;
var testColor = new CMYKColor(); //initial default colour
testColor.cyan = 62;
testColor.magenta = 62;
testColor.yellow = 62;
testColor.black = 62;

var myGrey = new CMYKColor(); //initial default grey
myGrey.black = 100;


// Stepping through each item on the layer.
for (var i = 0; i < layer.pathItems.length; i++) {
  var item = layer.pathItems[i];

  $.writeln("Test colour ", Math.round(item.fillColor.cyan));
  if (Math.round(item.fillColor.cyan) > testColor.red &&
    Math.round(item.fillColor.magenta) > testColor.magenta &&
    Math.round(item.fillColor.yellow) > testColor.yellow &&
    Math.round(item.fillColor.black) > testColor.black) {
    $.writeln("Color function", i);
    item.fillColor = myGrey;
    item.selected = true;
  }

}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这应该会为您提供一个良好的开端。 *可能有更好的方法对此进行编码,但插图画家文档在确定如何实例化或比较颜色方面似乎没有太大帮助。

var layer = app.activeDocument.activeLayer;

var testColor = new RGBColor(); // initial default colour
testColor.red = 255; // rest of the values default to 0

var greyColor = new CMYKColor(); // initial default grey
greyColor.black = 75; // rest of the values default to 0

for (var i=0; i<layer.pathItems.length; i++) {
   var item = layer.pathItems[i];

   if (item.fillColor.red === testColor.red &&
       item.fillColor.blue === testColor.blue &&
       item.fillColor.green === testColor.green)
   {
      item.fillColor = greyColor;
   }
}