Im RGB-vordefinierte Farbe am nächsten

Edit:

Mit der Antwort ich habe diese Funktion

function grabclosestcolor($r, $g, $b){
    $colors = array(array(124,12,12),array(7,7,11),array(110,224,219),array(123,123,123),array(124,177,74),array(130,86,53),array(77,77,77),array(164,124,68),array(204,196,132),array(164,148,147),array(163,123,67),array(26,122,26), array(195,195,50),array(193,193,193),array(255,248,73),array(243,243,243));
    $differencearray = array();
    foreach ($colors as $value) {
        $difference = sqrt(pow($r-$value[0],2)+pow($g-$value[1],2)+pow($b-$value[2],2));
        array_push($differencearray, $difference);
        $smallest = min($differencearray);
        $key = array_search($smallest, $differencearray);
        return $colors[$key];
        }
    }


Mein Ziel ist es diese. Ich schnappe mir ein Bild und eine Schleife durch jedes pixel und greifen Sie seine x -, y-und rgb.

Anstatt nur grabbing die rgb -, ich habe ein vordefiniertes array und ich bin auf der Suche nach der nächsten übereinstimmung von der Farbe, die ich ergriff, um das vordefinierte array.
Das Ziel hier ist, verwenden Sie nur Farben aus dem vordefinierten array.
Hier ist mein array von Farben.

$colors = array(array(124,12,12),array(7,7,11),array(110,224,219),array(123,123,123),array(124,177,74),array(130,86,53),array(77,77,77),array(164,124,68),array(204,196,132),array(164,148,147),array(163,123,67),array(26,122,26), array(195,195,50),array(193,193,193),array(255,248,73),array(243,243,243));

und hier ist mein vorhandener code durchläuft es alle.

$int = imagesx($im) - 1;
$int2 = imagesy($im) - 1;
$start2 = 0;
do{
    $start = 0;
    do{
        $rgb = imagecolorat($im, $start, $start2);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;
        $value = rgb2hex($r,$g,$b).":$start:$start2";
        array_push($colorsofimage, $value);
    } while($int > $start++);
} while($int2 > $start2++);

rgb2hex ist eine benutzerdefinierte Funktion, was ich aber erreichen möchte ist, das zu ändern-Funktion mit der Funktion zu packen, der nächsten Farbe.

$colorsofimage enthält ein array der einzelnen Bildpunkte info mit hex:x:y
was ich will ist rgb2hex(NEWFUNCTION($r,$g,$b));
Also, dass die neue hex ist die 1 aus dem vordefinierten array.

Ich hoffe Sie verstehen, denn ich habe keine Ahnung, wie es zu tun, denn ich weiß nicht, der Algorithmus für eine Farbe.

  • Je nachdem, wie schwer Sie gehen wollen, die Antwort auf meine (ähnliche) Frage von nutzen sein können - stackoverflow.com/questions/4057475/...
  • Wieder, ich don T wissen, PHP, gut, aber die Funktion, die Sie geben, wie Ihre Lösung aussieht, wesentlich weniger effizient als die, die ich früher vorgeschlagen: stackoverflow.com/questions/4485229/...
  • warum ist es eine Rückkehr in die foreach-Schleife?
InformationsquelleAutor Ugleh | 2010-12-19
Schreibe einen Kommentar