5

特定の16進カラーコードをより一般的なカテゴリ(赤、グレン、青、黄、オレンジ、ピンク、黒、白、灰色など)に簡単に割り当てる方法はありますか?

のように#ffcc55->オレンジ、#f0f0f0->白、..。

編集:またはアドビフォトショップが最も近いウェブの安全な色を見つけるのと同じように、色の数を256に減らすことは、すでに素晴らしい解決策になるでしょう!

4

2 に答える 2

4

これはhttp://php.net/manual/en/function.dechex.phpからのもので、lavacubedotcomのcoryからのコメントです。

<?php

function color_mkwebsafe ( $in )
{
    // put values into an easy-to-use array
    $vals['r'] = hexdec( substr($in, 0, 2) );
    $vals['g'] = hexdec( substr($in, 2, 2) );
    $vals['b'] = hexdec( substr($in, 4, 2) );

    // loop through
    foreach( $vals as $val )
    {
        // convert value
        $val = ( round($val/51) * 51 );
        // convert to HEX
        $out .= str_pad(dechex($val), 2, '0', STR_PAD_LEFT);
    }

    return $out;
}

?>

例:color_mkwebsafe( '0e5c94'); 生産物:006699

于 2012-09-19T00:10:32.000 に答える
4

私はPHPの第一人者ではないので、これをphpで解決するより効率的な方法があるかもしれませんが、各色を配列として設定するので、色のカテゴリごとに3つの数値があります。次に、提案された色と他の各色との間の数学的距離を見つけます。最も近い一致を保存し、その名前を返します。

function getcolorname($mycolor) {
    // mycolor should be a 3 element array with the r,g,b values 
    // as ints between 0 and 255. 
    $colors = array(
        "red"       =>array(255,0,0),
        "yellow"    =>array(255,255,0),
        "green"     =>array(0,255,0),
        "cyan"      =>array(0,255,255),
        "blue"      =>array(0,0,255),
        "magenta"   =>array(255,0,255),
        "white"     =>array(255,255,255),
        "grey"      =>array(127,127,127),
        "black"     =>array(0,0,0)
    );

    $tmpdist = 255*3;
    $tmpname = "none";
    foreach($colors as $colorname => $colorset) {        
        $r_dist = (pow($mycolor[0],2) - pow($colorset[0],2));
        $g_dist = (pow($mycolor[1],2) - pow($colorset[1],2));       
        $b_dist = (pow($mycolor[2],2) - pow($colorset[2],2));
        $totaldist = sqrt($r_dist + $g_dist + $b_dist);
        if ($totaldist < $tmpdist) {        
            $tmpname = $colorname;
            $tmpdist = $totaldist;
        }
    }
    return $tmpname;
}
于 2012-09-19T00:23:55.103 に答える