Farbcodierung in Hex -> automatische Errechnung

  • Hi...
    Ich habe mal wieder ein kleines aber feines Problem...



    Folgende Dinge habe ich bisher herausgefunden:


    #FF0000 = Rot
    #00FF00 = Grün
    #0000FF = Blau


    Der Code für die Farben ist in 3 Blöcke unterteilt. Dies setzt sich wie folgt zusammen:
    #|00|00|00
    am Anfang erstmal ein # dann:
    der erste Block steht für alle roten Farben (roter Kanal)
    der zweite Block steht für alle grünen Farben (grüner Kanal)
    der dritte für alle blauen Farben (blauer Kanal)


    Ich weiß auch, dass FF für 255 steht, da jeder Kanal mit 256 (0-255) Farben belegt ist (8-Bit)


    Jetzt mal zu meiner Frage:
    Ich habe einen Farbcode, für dieses Beispiel nehmen wir der Einfachheit halber #000000 (Schwarz).
    Ich möchte jetzt mit hilfe von PHP den maximalen Kontrast errechnen lassen.
    In diesem Falle währe das #FFFFFF (Weiß).
    Hat jemand von euch eine Idee, wie es umzusetzen ist, dass das Script aus jeder beliebigen Farbe den größtmöglichen Kontrast errechnet?
    Stehe da echt mal auf dem Schlauch...


    Ich danke schonmal im Voraus


    euer YetiZwerg

  • PHP
    1. <span class="syntaxdefault"><br />function compcolor</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$hex</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">  $c</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"r"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> dechex</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">255</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">hexdec</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$hex</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 2</span><span class="syntaxkeyword">)));<br /></span><span class="syntaxdefault">  $c</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"g"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> dechex</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">255</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">hexdec</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$hex</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 3</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 2</span><span class="syntaxkeyword">)));<br /></span><span class="syntaxdefault">  $c</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"b"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> dechex</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">255</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">hexdec</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$hex</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 5</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 2</span><span class="syntaxkeyword">)));<br /></span><span class="syntaxdefault">  foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$c as $k </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $v</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$v</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">===</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">      $c</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$k</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"0"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$v</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">  $co </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"#"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">  foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$c as $v</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    $co </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> $v</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">  return strtoupper</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$co</span><span class="syntaxkeyword">);<br />}<br /></span><span class="syntaxdefault"> </span>


    Einfach obige Funktion benutzen.
    Parameter muss ein ganz normaler Farbwert inklusive "#" sein.
    DerWaldschrat