Я работаю над модулем node, который вернет цвет, который будет выглядеть лучше всего на фоновом изображении, которое, конечно же, будет иметь несколько цветов.
Вот что я до сих пор:
'use strict';
var randomcolor = require('randomcolor');
var tinycolor = require('tinycolor2');
module.exports = function(colors, tries) {
var topColor, data = {};
if (typeof colors == 'string') { colors = [colors]; }
if (!tries) { tries = 10000; }
for (var t = 0; t < tries; t++) {
var score = 0, color = randomcolor(); //tinycolor.random();
for (var i = 0; i < colors.length; i++) {
score += tinycolor.readability(colors[i], color);
}
data[color] = (score / colors.length);
if (!topColor || data[color] > data[topColor]) {
topColor = color;
}
}
return tinycolor(topColor);
};
Итак, как это работает, я сначала предоставляю этот script 6 наиболее доминирующими цветами в изображении следующим образом:
[ { r: 44, g: 65, b: 54 },
{ r: 187, g: 196, b: 182 },
{ r: 68, g: 106, b: 124 },
{ r: 126, g: 145, b: 137 },
{ r: 147, g: 176, b: 169 },
{ r: 73, g: 138, b: 176 } ]
а затем он будет генерировать 10 000 различных случайных цветов, а затем выбрать тот, который имеет наилучший средний коэффициент контрастности с 6 заданными цветами.
Проблема в том, что в зависимости от того, какой script я использую для генерации случайных цветов, я получаю в основном те же результаты независимо от изображения.
С tinycolor2
я всегда получаю либо очень темный серый (почти черный), либо очень светло-серый (почти белый). И с randomcolor
я либо закончил темно-синий, либо светлый персиковый цвет.
Мой script может не быть лучшим способом обойти это, но есть ли у кого-нибудь идеи?
Спасибо