2010-12-16 7 views
0

Ich habe eine Vorlage von verschiedenen Farben Hexs. Im Moment benutze ich eine rgb2hex Funktion entweder oder arbeitet. Das Ziel ist, ich habe eine Reihe von Farben, die ich verwenden muss, und ich möchte, dass die vorhandenen Farben hex oder rgb zu der nächsten Farbe eines Arrays oder etwas ändern.rbg oder hex zu colest gewählten Farben?

im Grunde habe ich etwa 15 Farbwerte, und ich möchte im Grunde eine Funktion, die die rgb nimmt und sehen, welche seiner Nähe zu (einer Anordnung)

+1

Sie können die Verwendung eines vollständig dif unterschiedliches Farbmodell. –

Antwort

0

Wenn ich Sie richtig verstehe Sie eine beliebig annähern wollen Hex-Farbe vordefiniert?

Machen Sie eine Funktion, die r-g-b zerlegt, sowohl die Eingabe als auch Ihre Matrix.

$inHex = array(r,g,b); 
$colArray = array(array(r1,g1,b1),array(...)) 

$minDiff = 10000; 
$color = false; 
for($i=0;$i<sizeof($colArray);$i++) { 
    $diff = abs($inHex(0) - $colArray[$i][0]) + 
    abs($inHex(1) - $colArray[$i][2]) + 
    abs($inHex(2) - $colArray[$i][2]); 
    if ($diff<$minDiff) $color = $i; 
} 
//ok, $color is pointing at closest color.. 

Grüßen, // t

+0

Also wenn ich dich richtig mache, muss ich zuerst 15 Arrays machen, einfach mit r g b innerhalb $ colArray. mit der Farbe im in $ inHex verwenden – Ugleh

1

Edit: Haben Sie schon einmal um nur für etwas googeln Sie Ihre eigene Antwort zu finden? Hier ist eine Funktion, insofern sinnvoller sein könnte, wie es in sich geschlossenes ist:


function convertToClosest($c) { 
    // set minimum difference you'll allow between colors 
    $minDiff = 1000; 
    // generate color array 
    $colorArrayOriginal = array(
     "black" => "000000", 
     "brown" => "6E4700", 
     "gray" => "555555", 
     "white" => "FFFFFF", 
     "red" => "EB0000", 
     "orange" => "FF9914", 
     "yellow" => "FFF71C", 
     "green" => "1BB500", 
     "blue" => "005BB5", 
     "purple" => "4E00B5"   
    ); 
    foreach ($colorArrayOriginal as $colorID => $color) { 
     $r = substr($color,0,2); 
     $g = substr($color,2,2); 
     $b = substr($color,4,2); 
     $colorArray[$colorID] = array($r,$g,$b);  
    } 
    // here, we break apart the color we input, $c 
    $r = substr($c,0,2); 
    $g = substr($c,2,2); 
    $b = substr($c,4,2); 
    $inHex = array($r,$g,$b); 

    $color = false; 
    // we define the "best so far" variable as the min, since we can't have a best that's more 
    $bestDiff = $minDiff; 

    // here, we parse through each of the colors finding the closest, using the native hexdec function to parse 
    // out the best values to compare 
    foreach ($colorArray as $colorID => $cc) {  
     $diff = abs(hexdec($inHex[0]) - hexdec($cc[0])) + abs(hexdec($inHex[1]) - hexdec($cc[1])) + abs(hexdec($inHex[2]) - hexdec($cc[2])); 
    // if the difference in value between the colors is less than the best one of all the ones we've tried... 
    if ($diff<=$bestDiff) { 
     $color = $colorID; 
     $bestDiff = $diff; 
    } 
    } 
return $color; 
} 

Hier ist das Original:

function convertToClosest($c,$colorArray) { 
    // here, we break apart the color we input, $c 
    $r = substr($c,0,2); 
    $g = substr($c,2,2); 
    $b = substr($c,4,2); 
    $inHex = array($r,$g,$b); 
    $color = false; 
    // we define the "best so far" variable as the min, since we can't have a best that's more 
    $bestDiff = $minDiff; 

    // here, we parse through each of the colors finding the closest, using the native hexdec function to parse 
    // out the best values to compare 
    foreach ($colorArray as $colorID => $cc) { 
    $diff = abs(hexdec($inHex[0]) - hexdec($cc[0])) + abs(hexdec($inHex[1]) - hexdec($cc[1])) + abs(hexdec($inHex[2]) - hexdec($cc[2])); 
    // if the difference in value between the colors is less than the best one of all the ones we've tried... 
    if ($diff<=$bestDiff) { 
    $color = $colorID; 
    $bestDiff = $diff; 
    } 
    } 
return $color; 
} 

auch, wenn Sie die $ colorArray generieren möchten Variable

$colorArrayOriginal = [two dimensional array of your colors ] 
foreach ($colorArrayOriginal as $c) { 
    $r = substr($c["hex"],0,2); 
    $g = substr($c["hex"],2,2); 
    $b = substr($c["hex"],4,2); 
    $colorArray["$c[id]"] = array($r,$g,$b);  
}