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