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

Illustrator script to find all colors in document

我正在寻找一个脚本,它可以通过颜色编号(rgb 或 cmyk)为我提供 Adob​​e Illustrator 文档中所有颜色的列表。我没有代码,也不知道如何做到这一点,或者如果你可以的话。任何人都可以给我任何信息吗?

来自 SVG

此解决方案使用浏览器 parse/extract 显示所有颜色。您应该按照以下步骤操作:

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

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,"")
      if (!colors.includes(color))
        colors.push(color);

    }

  }

}
console.log(colors)

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

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

你也可以用浏览器打开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: 等,而不是文件:)。

这将遍历活动文档中的所有形状并使用它们的 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