この16進数の色の強度を検出するにはどうすればよいですか: #000000
? このコードにそのメソッドを使用できます。たとえば、背景色が黒の場合、テキストの色を#FFFFFF
(白) に設定する必要があります。ランダムな色を生成するためにこのスニペットを使用しています:
$random_color = '#'.base_convert(rand(0, 16777215), 10, 16);
この16進数の色の強度を検出するにはどうすればよいですか: #000000
? このコードにそのメソッドを使用できます。たとえば、背景色が黒の場合、テキストの色を#FFFFFF
(白) に設定する必要があります。ランダムな色を生成するためにこのスニペットを使用しています:
$random_color = '#'.base_convert(rand(0, 16777215), 10, 16);
いくつかの有効なアプローチがありますが、最も簡単なのは、色をグレースケールに変換し、結果の値が上半分か下かを確認することです。上にある場合は明るい色で、テキストの色として黒を使用する必要があります。下にある場合は暗いため、白が最適です。このようなもの:
function getReadableTextColor( $backgroundColor ) {
$R = ($backgroundColor >> 16 ) & 0x000000ff;
$G = ($backgroundColor >> 8 ) & 0x000000ff;
$B = ($backgroundColor ) & 0x000000ff;
// grayscale: 0.3RED + 0.59GREEN + 0.11Blue
$K = (($R * 0.3) + ($G * 0.59) + ($B * 0.11));
// black fg color for light background, white for dark ones
return ( $K > 128 ) ? 0x000000 : 0xffffff;
}
次に、このように使用します
$bgColor = rand(0, 16777215);
$bgcolorHTML = '#' . base_convert($bgColor, 10, 16);
$fgColor = getReadableTextColor( $bgColor );
$fgColorHtml = '#' . base_convert($fgColor, 10, 16);
読みやすくするには、負の色を計算する必要があると思います。この機能を試してください:
<?php
function NegativeColor($color)
{
$r = substr($color, 0, 2);
$g = substr($color, 2, 2);
$b = substr($color, 4, 2);
//Invert colors, (255 - colVal)
$r = 0xff-hexdec($r);
$g = 0xff-hexdec($g);
$b = 0xff-hexdec($b);
return str_pad(dechex($r),2,0,STR_PAD_LEFT)
.str_pad(dechex($g),2,0,STR_PAD_LEFT)
.str_pad(dechex($b),2,0,STR_PAD_LEFT);
}
var_dump(NegativeColor('000000'));
//output : string(6) "ffffff"
?>