spicker: hexadezimale Farbwerte auf Helligkeit analysieren

Hey Zusammen! :-)

Ich beitreibe ein social Network in welchem die User eine eigene Hintergrundfarbe für ihr Profil festlegen können.
Wenn dieses jedoch zu dunkel ist, lässt sich mein Logo (schwarz) nichtmehr erkennen.
Ich hatte folgende Fantasie: Feststellen, wie hell die Hintergrundfarbe ist und das Logo entsprechend Schwarz oder Weiss ausgeben.
Wie würde man hier vorgehen?
Ich würde den Farbwert (hex) in RGB zerlegen und dann bei Überschreiten des Mittelwertes die Farbe wechseln.
Gibts hierfür evtl. schon einen Workaround?

Freue mich über kleine Hinweise und wünsche ansonsten ein schönes Wochenende!
LG

  1. Hallo spicker,

    Die Idee hört sich doch gut an.

    Gibts hierfür evtl. schon einen Workaround?

    Ein Workaround? Das ist ein Zweizeiler...

    Erst mal RGB-Werte auslesen:
    $rgb = array(substr($hex,0,2), ...);
    Anschließend Durchschnitt berechnen:
    $average = (hexdec($rgb[0]) + ...) / 3;

    Da du nicht gesagt hast um welche Programmiersprache es geht, habe ich einfach mal PHP genommen.

    Gruß,
    Dodwin

    --
    Dodwin
    1. @@Dodwin:

      nuqneH

      Erst mal RGB-Werte auslesen:
      $rgb = array(substr($hex,0,2), ...);

      Wo bekommst du $hex her? Aus dem Stylesheet?
      Bei der Angabe "#FF0000" stünde noch '#' davor.
      Dieselbe Farbe kann aber auch als "#F00" angegeben werden.
      Dieselbe Farbe kann aber auch als "rgb(255, 0, 0)" angegeben werden.
      Dieselbe Farbe kann aber auch als "red" angegeben werden.

      Anschließend Durchschnitt berechnen:
      $average = (hexdec($rgb[0]) + ...) / 3;

      Nein. Das ergäbe für "#FF0000", "#00FF00" und "#0000FF" denselben Mittelwert 85. "#00FF00"/"green" erscheint aber viel heller als "#FF0000"/"red" und "#0000FF"/"blue".

      Deshalb ist für die (vom menschlichen Auge wahrgenommene) Helligkeit ein gewichteter Mittelwert zu berechnen:
      0.299 * R + 0.587 * G + 0.114 * B (YUV-Farbmodell)

      Qapla'

      --
      Volumen einer Pizza mit Radius z und Dicke a: pi z z a
      1. Hallo Gunnar,

        $rgb = array(substr($hex,0,2), ...);
        Wo bekommst du $hex her? Aus dem Stylesheet?

        Diese Information konnte ich dem Startposting leider auch nicht entlocken.
        Daher ging ich vom trivialsten Fall aus (dass der Wert in einer Variable vorliegt).

        Bei der Angabe "#FF0000" stünde noch '#' davor.

        Oh mein Gott, dann ist ja alles kaputt! *SCNR*

        Dieselbe Farbe kann aber auch als "#F00" angegeben werden.
        Dieselbe Farbe kann aber auch als "rgb(255, 0, 0)" angegeben werden.
        Dieselbe Farbe kann aber auch als "red" angegeben werden.

        Woher weißt du das? Kennst du das Social Network? spicker hat nichts dazu gesagt in welcher Form die Werte vorliegen.

        Deshalb ist für die (vom menschlichen Auge wahrgenommene) Helligkeit ein gewichteter Mittelwert zu berechnen:
        0.299 * R + 0.587 * G + 0.114 * B (YUV-Farbmodell)

        Interessant. Danke!

        Gruß,
        Dodwin

        --
        Dodwin
  2. Hi,

    Ich hatte folgende Fantasie: Feststellen, wie hell die Hintergrundfarbe ist und das Logo entsprechend Schwarz oder Weiss ausgeben.
    Wie würde man hier vorgehen?
    Ich würde den Farbwert (hex) in RGB zerlegen und dann bei Überschreiten des Mittelwertes die Farbe wechseln.

    Was würdest du also bspw. über dunklem Blau (#0000ff) anzeigen wollen?

    RGB eignet sich für das Vorhaben weniger. Die Farbräume HSV/HSL würden sich wohl eher anbieten.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]