【问题标题】:Change the color of objects with extendscript使用extendscript更改对象的颜色
【发布时间】:2014-07-23 11:58:19
【问题描述】:

我环顾四周,找不到任何东西可以做到这一点,所以我想我可能问错了问题。

我在 Illustrator 的页面上有一系列对象,它们具有 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);
           };

}

我也希望能够更改笔触颜色。任何帮助都非常感谢,非常坚持这一点

【问题讨论】:

    标签: javascript scripting adobe-illustrator extendscript


    【解决方案1】:

    感谢乔希让我朝着正确的方向前进。我想我现在明白了。首先必须将文件菜单下的文档颜色模式设置为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;
       }
    
    }
    

    【讨论】:

    • 是否可以在脚本开头更改颜色模式(使用 CS5)
    【解决方案2】:

    在印前工作中使用类似的东西。 我调整了上面的 RGB 版本,仅将所有丰富的黑色转换为 K。仍在尝试颜色值,并将添加一种检查笔触颜色的方法。 谢谢!找了很久的解决办法。

    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;
      }
    
    }

    【讨论】:

      【解决方案3】:

      这应该为您尝试完成的工作提供一个良好的开端。 * 可能有更好的编码方式,但 illustrator 文档在弄清楚如何实例化或比较颜色方面似乎没有太大帮助。

      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;
         }
      }
      

      【讨论】:

      • 谢谢你,但它似乎不起作用。它与定义 RGB 颜色有关。当我插入行 $.writeln("Test colour",item.fillColor.red);在定义 item 变量的行之后,它吐出 undefined
      • 但它会识别 CKYK,所以如果我使用 $.writeln("Test colour",item.fillColor.cyan) 它会给出一个值
      猜你喜欢
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多