すみません、すみません、wordpress上で実現しようとしていますが、正確にはwordpressの問題ではありません。phpでのロジックの問題なのです・・・
迷惑になってしまうかもしれないのでその他の話題で投稿させていただきます。お時間のある技術者の方がいらしたらお手数ですがご教授願います。
タイトルどおり、背景色のRGBから見やすいテキストの文字色を計算で算出できないかと試行錯誤しております。
計算式の元になるものはW3CのノートおよびWCAG2.0に示されている基準値とされている計算式で、こちらの計算式を参考にしています。
カスタムフィールドにRGBで背景色を指定し、<div class="post">タグにstyleで書き出しをします。ここまではいいのですが、このとき文字色もstyleで書き出そうと思います。
※なぜカスタムフィールドで文字色も指定させないかなどのあたりは事情をお察しください。
カスタムフィールドのRGBを取得して色の差500を目指すソースを記述してみましたが、中間色の背景を指定すると文字色も中間色になってしまいあえなく失敗でした。
根本から見直さなくてはならないと思いますが、手詰まりです。お力添えいただけましたら幸いです。
参考ソース:(破綻しているソースです・・・)
/* --------------------------------------------
* 背景色の指定
* -------------------------------------------- */
function bc_background_color() {
global $post;
$str = get_post_meta($post->ID, '背景色', true);
if( substr($str, 0, 1) == "#" ) {
if( strlen($str) == 7 ) {
$r = hexdec(substr($str, 1, 2));
$g = hexdec(substr($str, 3, 2));
$b = hexdec(substr($str, 5, 2));
} elseif( strlen($str) == 4 ) {
$r = substr($str, 1, 1);
$g = substr($str, 2, 1);
$b = substr($str, 3, 1);
} else {
}
}
function rgb_chk($str) {
if( $str > 128 ) {
$num = 0;
} else {
$num = 255;
}
$str = abs($str - 128);
return array($str,$num);
}
$bright = (($r*299)+($g*587)+($b*114))/1000;
$sr = rgb_chk($r);
$sg = rgb_chk($g);
$sb = rgb_chk($b);
echo "R = {$r} G = {$g} B = {$b}<br />\n";
echo "sR = {$sr[0]} sG = {$sg[0]} sB = {$sb[0]}<br />\n";
$srgb = 500 - ( $sr[0] + $sg[0] + $sb[0] );
echo "srgb = {$srgb}<br />\n";
$rt = $sr[1] + (($srgb / ( $r + $g + $b )) * $r);
$gt = $sg[1] + (($srgb / ( $r + $g + $b )) * $g);
$bt = $sb[1] + (($srgb / ( $r + $g + $b )) * $b);
if( $rt > 255 ) {
$num = ceil(($rt - 255) / 2);
$rt = "FF";
$gt = dechex($gt + $num);
$bt = dechex($bt + $num);
} elseif( $gt > 255 ) {
$num = ceil(($gt - 255) / 2);
$gt = "FF";
$rt = dechex($rt + $num);
$bt = dechex($bt + $num);
} elseif( $bt > 255 ) {
$num = ceil(($bt - 255) / 2);
$bt = "FF";
$rt = dechex($rt + $num);
$gt = dechex($gt + $num);
} else {
$rt = dechex($rt + $num);
$gt = dechex($gt + $num);
$bt = dechex($bt + $num);
}
echo "Rt = {$rt} Gt = {$gt} Bt = {$bt}<br />\n";
if( $str ) {
echo " style=\"background-color:{$str};color:#{$rt}{$gt}{$bt}\"";
}
return;
}