【问题标题】:Illustrator script to find all colors in document用于查找文档中所有颜色的 Illustrator 脚本
【发布时间】:2019-01-17 06:35:48
【问题描述】:

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

【问题讨论】:

  • 您是在 .AI 文件中还是在色板列表中寻找形状的颜色?它们不是同一件事。此外,有些形状可能是样本中未使用的颜色,有些样本可能在文档中未使用...
  • 这是一个一般性评论,因为您已经发布了几个关于脚本 Adob​​e Illustrator 的问题:您检查过Adobe's reference material
  • 是的,我已经阅读了它,但操作是有限的。我在画板上寻找颜色而不是样本。

标签: javascript adobe-illustrator


【解决方案1】:

来自 SVG

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

这个想法是遍历所有元素并使用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,"$2")
      if (!colors.includes(color))
        colors.push(color);

    }

  }

}
console.log(colors)

此处的完整功能示例:https://jsfiddle.net/gwd35Lyv/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: 等,而不是文件:)。

【讨论】:

  • 我不是 100% 如何将其更改为适用于 adobe illustrator。你知道吗?
  • @Lady_dragon4 我已经以我认为对您有用的方式更新了答案,请参阅jsfiddle.net/ba7fp6ry
【解决方案2】:

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

【讨论】:

  • 这个似乎和我的其他代码有同样的问题。超过 200 的一切都会好起来的。由于某种原因,它不会停留在 210 的上限,所以 255 似乎也很好。
猜你喜欢
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 2022-01-03
  • 2015-03-19
相关资源
最近更新 更多