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;
}
我用过 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;
}