2015-01-15 14 views
0

У меня есть массив в моем javascript с цветами rgb. Скажем, это выглядит следующим образом:Сортировка массива с цветом rgb на Javascript

colors = ['(133,10,22)', '(33,33,33)', '(255,255,255)', '(1,1,1)']; 

Как я могу отсортировать этот массив таким образом, чтобы получить самый светлый цвет первый и самый темный в последний раз? Таким образом, в конце концов мой массив, чтобы выглядеть следующим образом, например:

colors = ['(255,255,255)', '(133,10,22)', '(33,33,33)', '(1,1,1)']; 

Есть ли какое-либо конкретная библиотека кому-то нужно использовать, или это как самую большую сумму г + г + б легчайшего цвета? Спасибо заранее.

+0

Для очень простого алгоритма это может быть просто сумма. Каждое число представляет количество света в каждом канале, поэтому больше света в целом = более яркий цвет. – pawel

+0

@pawel Итак, rgb (90, 90, 90) ярче rgb (255, 0, 0)? – JJJ

ответ

0

Как отметил @Juhuna, яркость не является суммой каналов.

var colors = ['(133,10,22)', '(33,33,33)', '(255,255,255)', '(1,1,1)']; 

function sumColor (str) { 
    var rgb = str.replace(/[()]/g, "").split(",").map(Number); 

    // Summing the channels does not calculate brightness, so this is incorrect: 
    // return rgb[0] + rgb[1] + rgb[2]; 

    // To calculate relative luminance under sRGB and RGB colorspaces that use Rec. 709: 
    return 0.2126*rgb[0] + 0.7152*rgb[1] + 0.0722*rgb[2]; 
} 

colors.sort(function (a, b) { 
    return sumColor(a) > sumColor(b); 
}).reverse(); 
+0

Яркость не является суммой каналов. – JJJ

+0

tack Я использовал эту сумму вместо этого, а затем просто сортирую. И я думаю, что все отлично. – novellino

Смежные вопросы