Прежде всего, я думаю, вам стоит взглянуть на этот отличный пост в блоге на 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
, вы можете сделать это случайным образом, как я уже говорил, использовать вторую функцию, чтобы помочь вам с этой задачей, например насыщенность или яркость , которая действительно зависит что вы ищете.