Javascript 根据十六进制背景获得白色/黑色

Javascript 根据十六进制背景获得白色/黑色,javascript,php,hex,Javascript,Php,Hex,我有这个Javascript函数,可以根据给定的十六进制背景颜色为文本获取正确的颜色(白色或黑色),这很好: // Ideal color function getRGBComponents(color) { var r = color.substring(1, 3), g = color.substring(3, 5), b = color.substring(5, 7); return { R: parseInt(r, 16),

我有这个Javascript函数,可以根据给定的十六进制背景颜色为文本获取正确的颜色(白色或黑色),这很好:

// Ideal color
function getRGBComponents(color) {
    var r = color.substring(1, 3),
        g = color.substring(3, 5),
        b = color.substring(5, 7);
    return {
        R: parseInt(r, 16),
        G: parseInt(g, 16),
        B: parseInt(b, 16)
    };
}
function idealTextColor(bgColor) {
    if (bgColor.length === 4) {
        bgColor = '#' + bgColor[1] + bgColor[1] + bgColor[2] + bgColor[2] + bgColor[3] + bgColor;
    }
    var nThreshold = 105,
        components = getRGBComponents(bgColor),
        bgDelta = (components.R * 0.299) + (components.G * 0.587) + (components.B * 0.114);
    return ((255 - bgDelta) < nThreshold) ? "#000000" : "#ffffff";
}

idealTextColor("#123123");
//理想颜色
函数GetRGB组件(颜色){
var r=颜色。子字符串(1,3),
g=颜色。子串(3,5),
b=颜色。子串(5,7);
返回{
R:parseInt(R,16),
G:parseInt(G,16),
B:parseInt(B,16)
};
}
函数idealTextColor(bgColor){
如果(bgColor.length==4){
bgColor='#'+bgColor[1]+bgColor[1]+bgColor[2]+bgColor[2]+bgColor[3]+bgColor;
}
var nThreshold=105,
组件=GetRGB组件(bgColor),
bgdta=(components.R*0.299)+(components.G*0.587)+(components.B*0.114);
返回((255-bgDelta)
我已将其转换为PHP:

// Ideal color
function getRGBComponents($color) {
    $r = substr($color, 1, 3);
    $g = substr($color, 3, 5);
    $b = substr($color, 5, 7);
    return Array(
        "R" => intval($r, 16),
            "G" => intval($g, 16),
            "B" => intval($b, 16)
        );
}
function idealTextColor($bgColor) {
    if (strlen($bgColor) == 4) {
        $bgColor = '#' . $bgColor[1] . $bgColor[1] . $bgColor[2] . $bgColor[2] . $bgColor[3] . $bgColor[3];
    }
    $nThreshold = 105;
    $components = getRGBComponents($bgColor);
    $bgDelta = ($components["R"] * 0.299) + ($components["G"] * 0.587) + ($components["B"] * 0.114);

    if((255 - $bgDelta) < $nThreshold) {
        return "#000000";
    } else {
        return "#FFFFFF";
    }
}

idealTextColor("#123123");
//理想颜色
函数getRGBComponents($color){
$r=substr($color,1,3);
$g=substr($color,3,5);
$b=substr($color,5,7);
返回数组(
“R”=>intval($R,16),
“G”=>intval($G,16),
“B”=>intval($B,16)
);
}
函数idealTextColor($bgColor){
如果(strlen($bgColor)==4){
$bgColor='#'。$bgColor[1]。$bgColor[1]。$bgColor[2]。$bgColor[2]。$bgColor[3]。$bgColor[3];
}
$nThreshold=105;
$components=getRGBComponents($bgColor);
$bgDelta=($components[“R”]*0.299)+($components[“G”]*0.587)+($components[“B”]*0.114);
如果((255-$bgDelta)<$nThreshold){
返回“#000000”;
}否则{
返回“#FFFFFF”;
}
}
idealTextColor(“123123”);
它不起作用,它总是给我#00000作为颜色()。我怎样才能使它重新工作?或者某人有更好的功能来执行相同的任务

$r = substr($color, 1, 2);
$g = substr($color, 3, 2);
$b = substr($color, 5, 2);
substr的第二个参数是长度,而不是结束索引