Node.js:为什么纯黑色(#000000)会被检测为RGB 4、4、4?

Node.js:为什么纯黑色(#000000)会被检测为RGB 4、4、4?,node.js,color-thief,Node.js,Color Thief,我使用了node vibrant,get image colors,colorsteep,它们都检测到000000个RGB 4,4,4。 我在下面提供的代码将其视为4、4、4(目前使用node vibrant,但其他所有包也使用node vibrant) 此代码的输出为: Swatch { _rgb: [ 4, 4, 4 ], _population: 180, _hsl: [ 0, 0, 0.01568627450980392 ] } 我该如何解决这个问题? 感谢您抽出时间来看这

我使用了node vibrant,get image colors,colorsteep,它们都检测到000000个RGB 4,4,4。

我在下面提供的代码将其视为4、4、4(目前使用node vibrant,但其他所有包也使用node vibrant)

此代码的输出为:

Swatch {
  _rgb: [ 4, 4, 4 ],
  _population: 180,
  _hsl: [ 0, 0, 0.01568627450980392 ]
}
我该如何解决这个问题? 感谢您抽出时间来看这个问题。 另外,如果您提供的代码涉及“颜色盗贼”或“获取图像颜色”,我也可以。

我使用“获取像素”(获取图像颜色本身使用的内容)并计算值, 它以一个对象结束,该对象具有每种颜色的显示次数,最大值是显示次数最多的值

这导致: {“#000000ff”:4641,“max”:“#000000ff”} 为了你的档案

这段代码不是很通用,但您可以根据需要对其进行修改

getPixels('./assets/black.png', (err, pixels) => {
    const data = pixels.data;
    let mapped = {};
    let max = undefined;
    let keys = Object.keys(pixels.data);
    for(let i=0; i < keys.length;i+=4){
        let key = "#"+data[keys[i]].toString(16).padStart(2, "0")+
                      data[keys[i+1]].toString(16).padStart(2, "0")+
                      data[keys[i+2]].toString(16).padStart(2, "0")+
                      data[keys[i+3]].toString(16).padStart(2, "0");

        if(mapped[key]){
            mapped[key] += 1;
        } else {
             mapped[key] = 1 ;
        }
        if(max == undefined || mapped[key] > mapped[max]){
            max = key;
        }
    }
    mapped["max"] = max;
}
getPixels('./assets/black.png',(err,pixels)=>{
常量数据=像素。数据;
设mapped={};
设max=未定义;
让keys=Object.keys(pixels.data);
for(设i=0;i映射的[max]){
max=键;
}
}
映射[“max”]=max;
}

你确定png不是很深的灰色吗?眼睛不知道,所以我想我的问题是你是如何创建图像的?超链接上写着:“这里是图像。刚刚拍了一张命令提示符空白部分的照片。”。我已经使用其他工具进一步确认此图像为#000000。调色板不是颜色选择器,它应该根据图像中的颜色计算出与图像设计相匹配的颜色。你需要从代码中得到什么?你想要返回平均rgb的颜色吗?我想找到最突出的颜色在图像中,正确地说。您做了一些错误的事情,因为您的图像中有4641个像素,而您的输出显示人口为180。可能您使用了错误的图像。很抱歉响应非常晚,但此代码确实有效!
getPixels('./assets/black.png', (err, pixels) => {
    const data = pixels.data;
    let mapped = {};
    let max = undefined;
    let keys = Object.keys(pixels.data);
    for(let i=0; i < keys.length;i+=4){
        let key = "#"+data[keys[i]].toString(16).padStart(2, "0")+
                      data[keys[i+1]].toString(16).padStart(2, "0")+
                      data[keys[i+2]].toString(16).padStart(2, "0")+
                      data[keys[i+3]].toString(16).padStart(2, "0");

        if(mapped[key]){
            mapped[key] += 1;
        } else {
             mapped[key] = 1 ;
        }
        if(max == undefined || mapped[key] > mapped[max]){
            max = key;
        }
    }
    mapped["max"] = max;
}