JavaScript | Ближайший цвет js
Топ дня:
q[O_O]p [!] [БАН]
Тема закрыта by
mrDima
Причина: Не нуждается в дополнении
Причина: Не нуждается в дополнении
Есть json массив с цветами в rgb, и их названиями (пример): Также рандомный цвет: Нужно определять ближайший к нему за схожестью цвет из массива, и называть его
________
посл. ред. 11.11.2022 в 12:23; всего 3 раз(а); by mrDima
javascript
var palette = [ { "color": [255, 0, 0], "name": "red" }, { "color": [0, 255, 0], "name": "green" }, { "color": [0, 0, 255], "name": "blue" } ] javascript
var color = [167, 10, 23] ________
посл. ред. 11.11.2022 в 12:23; всего 3 раз(а); by mrDima
Теоретически можно так попробовать: для 167,10,23 выведет "red"
javascript
const rgbSum = (rgbArray) => rgbArray.reduce((pval, cval) => pval + cval, 0) const compareColor = (palette, color) => { const colorSum = rgbSum(color) let best = 0 let bestEl = null palette.forEach(el => { const elSum = rgbSum(el.color) - colorSum if(elSum < best || bestEl === null) { best = elSum bestEl = el } }) return bestEl } const palette = [ { "color": [255, 0, 0], "name": "red" }, { "color": [0, 255, 0], "name": "green" }, { "color": [0, 0, 255], "name": "blue" } ] const color = [167, 10, 23] console.log(compareColor(palette, color).name) javascript
const scoreSum = scoreArray => scoreArray.reduce((pval, cval) => pval + cval, 0) const compareColor = (palette, color) => { let score = 0; let bestEl = null palette.forEach(el => { const curScoreArray = [ Math.abs(el.color[0] - color[0]), Math.abs(el.color[1] - color[1]), Math.abs(el.color[2] - color[2]) ] const curScore = scoreSum(curScoreArray) if(curScore < score || bestEl === null) { score = curScore bestEl = el } }) return bestEl } const palette = [ { "color": [255, 0, 0], "name": "red" }, { "color": [0, 255, 0], "name": "green" }, { "color": [0, 0, 255], "name": "blue" } ] const color = [167, 255, 23] console.log(compareColor(palette, color).name)