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

Node.js: Why does pure black (#000000) get detected as RGB 4, 4, 4?

我用过 node-vibrant、get-image-colors、colorthief,它们都将 #000000 检测为 RGB 4、4、4。
Image here. Just took a picture of an empty portion of the Command Prompt.

我在下面提供的代码发现它是 4、4、4(当前使用 node-vibrant,但其他每个包也这样做。)

const fs = require('fs')
const gm = require('gm')
var Vibrant = require('node-vibrant')
Vibrant.from('test3.png').getPalette()
  .then((palette) => console.log(palette))

这段代码的输出是:

Swatch {
  _rgb: [ 4, 4, 4 ],
  _population: 180,
  _hsl: [ 0, 0, 0.01568627450980392 ]
}

我该如何解决这个问题? 感谢您抽出时间来看这个问题。 另外,如果您提供涉及 ColorThief 或 get-image-colors 的代码,我也很好。

我使用了 get-pixels(get-image-colors 使用它本身)并计算了值, 它最终得到一个对象,其中包含每种颜色出现的次数,max 是出现次数最多的值..

结果为: {“#000000ff”:4641,“最大”:“#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;
}