Illustrator脚本可查找文档中的所有颜色

时间:2018-08-09 17:43:30

标签: javascript adobe-illustrator

我正在寻找一个脚本,该脚本将通过颜色编号(rgb或cmyk)为我提供Adobe Illustrator文档中所有颜色的列表。我没有代码,也不知道如何执行此操作,或者甚至不知道。有人可以给我任何信息吗?

2 个答案:

答案 0 :(得分:0)

来自SVG

此解决方案使用浏览器来解析/提取所有存在的颜色。您应该按照以下步骤操作:

这个想法是遍历所有元素并使用getComputedStyle(),然后使用诸如rgb(n, n, n)之类的正则表达式仅提取诸如/(.*)(rgb\([0-9, ]*\))(.*)/g之类的值,然后执行另一个循环:

var doc = document.getElementsByTagName("*");
var colors = [];

for (let j = 0; j < doc.length; j++) {

  var styles = window.getComputedStyle(doc[j], null)

  for (let i = 0; i < styles.length; i++) {

    if (typeof styles[styles[i]] !== "undefined" && styles[styles[i]].match(/rgb\([0-9, ]*\)/g)) {

    let color = styles[styles[i]].replace(/(.*)(rgb\([0-9, ]*\))(.*)/g,"$2")
      if (!colors.includes(color))
        colors.push(color);

    }

  }

}
console.log(colors)

此处提供完整的功能示例:https://jsfiddle.net/gwd35Lyv/https://jsfiddle.net/oenmL4t6/一个空文档,您可以在其中包含创建的svg。

这是假设我们使用的是浏览器,而不是将JavaScript嵌入到插图文件中。

您还可以使用浏览器打开svg文件,例如https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/AJ_Digital_Camera.svg,按F12键,然后在控制台中将js代码粘贴到其中。

来自图片

以前的解决方案无法计算图像中存在的颜色,因为我们必须逐个读取像素,才能基于此How to get a pixel's x,y coordinate color from an image?进行操作。我们可以这样做:

var img = document.getElementById('my-image');
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);

var rect = img.getBoundingClientRect();

var colors = [];

for (let y = rect.top; y <= rect.left; y++) {

  for (let x = rect.left; x <= rect.right; x++) {
    var pixelData = canvas.getContext('2d').getImageData(x, y, 1, 1).data;
    var rgb = "rgb(" + pixelData[0] + ", " + pixelData[1] + ", " + pixelData[2] + ")"
    if (!colors.includes(rgb)) {
      colors.push(rgb);
    }

  }

}

console.log(colors)

这里有一个例子:http://jsfiddle.net/vkq0ew9n/的限制是图像应该在同一原点内(本地不起作用,只能使用http:https:等,而不是文件:)。

答案 1 :(得分:0)

这将循环遍历活动文档中的所有形状,并以其RGB填充颜色发布警报:

with (app.activeDocument) {
    if (pathItems.length > 0)
    {
        alert(pathItems.length);
        for (var g = 0 ; g < pathItems.length; g++)
          {
               if (pathItems[g].filled == true)
               {
                   if (pathItems[g].fillColor.red > 200 == true && pathItems[g].fillColor.red < 210 == true && pathItems[g].fillColor.green > 200 == true && pathItems[g].fillColor.green < 210 == true && pathItems[g].fillColor.blue > 200 == true && pathItems[g].fillColor.blue < 210 == true)
                       {
                        alert('R' + pathItems[g].fillColor.red + ' G' + pathItems[g].fillColor.green + ' B' + pathItems[g].fillColor.blue);
                        }
               }
          }
      }
} 

注意:您的文档必须处于RGB颜色模式下才能起作用

If长行使您的other question