Я нашел отзыв о подсказке полезным, чтобы устранить эту проблему в Tomcat -
, обязательно загрузите драйвер, сначала выполнив Class.forName («org.postgresql.Driver»); в вашем коде.
Это из сообщения - https://www.postgresql.org/message-id/e13c14ec050510103846db6b0e@mail.gmail.com
Код jdbc работал нормально как автономная программа, но в TOMCAT он дал ошибку «Не найден подходящий драйвер»
$hex = "78ff2f"; //Bg color in hex, without any prefixing #!
//break up the color in its RGB components
$r = hexdec(substr($hex,0,2));
$g = hexdec(substr($hex,2,2));
$b = hexdec(substr($hex,4,2));
//do simple weighted avarage
//
//(This might be overly simplistic as different colors are perceived
// differently. That is a green of 128 might be brighter than a red of 128.
// But as long as it's just about picking a white or black text color...)
if($r + $g + $b > 382){
//bright color, use dark font
}else{
//dark color, use bright font
}
Я сделал одно подобное - но на основе взвешивания каждого цвета (на основе версии этого потока на C #)
function readableColour($bg){
$r = hexdec(substr($bg,0,2));
$g = hexdec(substr($bg,2,2));
$b = hexdec(substr($bg,4,2));
$contrast = sqrt(
$r * $r * .241 +
$g * $g * .691 +
$b * $b * .068
);
if($contrast > 130){
return '000000';
}else{
return 'FFFFFF';
}
}
echo readableColour('000000'); // Output - FFFFFF
РЕДАКТИРОВАТЬ: Небольшая оптимизация Sqrt известен как дорогая математическая операция, которой, вероятно, пренебрегают в большинстве сценариев, но в любом случае этого можно избежать, если сделать что-то подобное.
function readableColour($bg){
$r = hexdec(substr($bg,0,2));
$g = hexdec(substr($bg,2,2));
$b = hexdec(substr($bg,4,2));
$squared_contrast = (
$r * $r * .299 +
$g * $g * .587 +
$b * $b * .114
);
if($squared_contrast > pow(130, 2)){
return '000000';
}else{
return 'FFFFFF';
}
}
echo readableColour('000000'); // Output - FFFFFF
Он просто не применяет sqrt, вместо этого он усиливает желаемый обрезанный контраст на два, что намного дешевле в расчете
Вам необходимо преобразовать значения RGB в HLS / HSL (оттенок яркости и насыщенности), затем вы можете использовать яркость, чтобы определить, нужен ли вам светлый текст или темный текст.
Эта страница содержит некоторые подробности о том, как конвертировать в PHP, а также о выборе дополнительного цвета из этого.
Я только что заметил, что это сайт астрологии - поэтому извиняюсь, если кто-то обиделся.
Я попробовал другой подход к этому, я использовал процент яркости HSL (оттенок, насыщенность и яркость), чтобы проверить, является ли цвет темным или светлым. (как сказал @chrisf в своем ответе)
функция:
function colorislight($hex) {
$hex = str_replace('#', '', $hex);
$r = (hexdec(substr($hex, 0, 2)) / 255);
$g = (hexdec(substr($hex, 2, 2)) / 255);
$b = (hexdec(substr($hex, 4, 2)) / 255);
$lightness = round((((max($r, $g, $b) + min($r, $g, $b)) / 2) * 100));
return ($lightness >= 50 ? true : false);
}
В обратной строке проверяется, является ли процент яркости выше 50%, и возвращает true в противном случае возвращается false. Вы можете легко изменить его на true, если цвет имеет 30% яркости и так далее. Переменная $lightness
может возвращать от 0 до 100 0, что является самым темным, а 100 - самым светлым.
Как использовать функцию:
$color = '#111111';
if ( colorislight($color) ) {
echo 'this color is light';
}
else {
echo 'this color is dark';
}
Если у вас активировано расширение imagemagick, вы можете просто создать объект ImagickPixel, вызвать setColor с вашим шестнадцатеричным значением, а затем вызвать getHSL() (и получить последний элемент полученного массива, я полагаю)...