Выбор подходящего фона / основной цвет с помощью PHP

Я надеюсь находить, почему вычислить цвет подходящего фона и цвет для текста, который переборщил бы, очевидно, я должен принять во внимание удобочитаемость и доступность.

Я должен был бы выбрать два цвета от массива, цвета хранятся в их шестнадцатеричных представлениях.

#CC9966
#996633
#FFCC99
#CCCC99
#000000
#333333
#666633
#663333
#CC9933
#FFCCCC

Я могу пользоваться библиотекой PHP как GD / imageMagick?

Любые предложения (Обратите внимание, что я использую PHP),

5
задан Lizard 12 April 2010 в 23:57
поделиться

3 ответа

Прежде всего, я думаю, вам стоит взглянуть на эту замечательную статью в блоге Particletree.

Учитывая это, я бы использовал их функцию smarty_modifier_contrast() и немного изменил ее для решения ваших конкретных задач, что-то вроде:

function color_contrast($bgcolor, $color1, $color2, $color3, ...)
{
    return (hexdec($bgcolor) > 0xffffff / 2) ? min(array_slice(func_get_args(), 1)) : max(array_slice(func_get_args(), 1));
}

Итак, вам нужно использовать любой случайный цвет для фона (не забудьте убрать #! ), а затем передать все остальные цвета в массив, в данном случае я использовал переменное количество аргументов, но вы можете изменить его так, чтобы он принимал один массив цветов - тогда он будет автоматически выбирать самый темный или самый светлый цвет в зависимости от $bgcolor и обеспечит достаточно хороший контраст для читабельности:

function color_contrast($bgcolor, $colors = array())
{
    return (hexdec($bgcolor) > 0xffffff / 2) ? min($colors) : max($colors);
}

Чтобы выбрать $bgcolor, вы можете сделать это произвольно, как я уже говорил, или использовать вторую функцию, чтобы помочь вам с этой задачей, например saturation или luminance, это действительно зависит от того, что вы ищете.

2
ответ дан 15 December 2019 в 06:21
поделиться

Разбейте каждый цвет на его компоненты RGB, добавьте 0x80 (или другое подобное значение, возможно, 0x66) к каждому, замаскируйте 0xff и найдите ближайшее значение в таблице.

0
ответ дан 15 December 2019 в 06:21
поделиться

Выбор случайных цветов обычно не является хорошей идеей для читабельности и доступности, поэтому я бы предложил вам переосмыслить ваш дизайн. Или, по крайней мере, ограничить текст только черным или белым цветом.

Если это невозможно, то я бы предложил рассчитать "расстояние" между двумя цветами, которое будет приблизительно равно визуальной разнице между цветами и, таким образом, в некоторой степени связано с удобочитаемостью.

Я бы использовал distance = abs(2*(r1-r2) + 3*(g1-g2) + (b1-b2)), а затем отфильтровал все комбинации, которые не имеют достаточно высокого расстояния. Это должно гарантировать, что в итоге вы получите либо темный цвет на светлом фоне, либо светлый цвет на темном фоне, что является практически обязательным условием для хорошей читаемости и гарантирует, что дальтоники также увидят два четко различающихся оттенка. Цветовые компоненты взвешиваются по-разному, поскольку они оказывают разное влияние на общую воспринимаемую яркость.

1
ответ дан 15 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: