Avatar billede bigo Nybegynder
17. august 2006 - 13:19 Der er 6 kommentarer og
1 løsning

farvet tekst ovenpå farvet baggrund

bliver ved f.eks. lys baggrund (gul) med hvid tekst svært læseligt.

er der nogen der har en funktion til at tage baggrundsfarven ("#xxxxxx" formatet) og returnerer f.eks. true ved lys og false ved mørk farve.

Har hørt noget om omregning til rgb eller hcl

Anyone
Avatar billede coderdk Praktikant
17. august 2006 - 13:54 #1
#xxxxxx er rgb ;P det er i hexadecimal #(r)xx(g)xx(b)xx :)
Avatar billede bigo Nybegynder
17. august 2006 - 14:55 #2
Men hvordan beregner man om den er lys eller mørk?
Avatar billede coderdk Praktikant
17. august 2006 - 15:14 #3
Du kan udregne "brightness" kan gøres ved at udregne den sande CIE luminans ud fra linære rød-, grøn- og blå-værdier:

function RGBtoBrightness( $red, $green, $blue )
{
  return round( ( $red * 3 + $green * 10 + $blue ) / 14 );
}

Hvis du ikke lige kan finde ud af hvad du synes er lyst og mørkt, kan du lave en lille test applikation der viser lidt:

    for ( $i = 0; $i <= 255; $i += 5 )
    {
        $rgb = sprintf( "#%02x%02x%02x", $i, $i, $i );
        $inv = sprintf( "#%02x%02x%02x", $i ^ 128, $i ^ 128, $i ^ 128 );
        echo "<div style='background: $rgb; color: $inv'>$rgb brightness "
            . RGBtoBrightness( $i, $i, $i ) . "</div>";
    }
Avatar billede coderdk Praktikant
17. august 2006 - 15:29 #4
Den brightness kan virke lidt underlig - Du kan også prøve at lege med nogle algoritmer fra easyrgb.com f.eks. f.eks. RGB til HSL (Hue Saturation Luminance) - her er det luminance du skal have fat i...
Avatar billede coderdk Praktikant
17. august 2006 - 15:41 #5
Her er en måde der er bedre, synes jeg:

    function RGBtoHSL( $r, $g, $b )
    {
        $r /= 255;
        $g /= 255;
        $b /= 255;
        $max = max($r, $g, $b);
        $min = min($r, $g, $b);
        $l = ($max + $min) / 2;
        $h = 0;
        $s = 0;
        if ( $max != $min )
        {
            $s = ( l < .5 ) ? ( $max - $min ) / ( $max + $min ) :
                ( $max - $min ) / ( 2 - $max - $min );
            $h = ( $max != $r ) ? ( ( $max != $g ) ? 4 * ( $r - $g ) /
                ( $max - $min ) : 2 * ( $b - $r ) / ( $max - $min ) ) :
                ( $g - $b ) / ( $max - $min );
        }
        $h *= 60;
        if ( $h < 0 )
            $h += 360;
        return array( $h, $s, $l );
    }

Du kan nu hente Hue, Saturation og Luminance med:

$hsl = RGBtoHSL( $r, $g, $b );

For at få et mere meningsfyldt tal ud af det:

$brightness = round( $hsl[2] * 100 );
Avatar billede coderdk Praktikant
17. august 2006 - 15:42 #6
Hov, funktionen skal se sådan ud:

    function RGBtoHSL( $r, $g, $b )
    {
        $r /= 255;
        $g /= 255;
        $b /= 255;
        $max = max($r, $g, $b);
        $min = min($r, $g, $b);
        $l = ($max + $min) / 2;
        $h = 0;
        $s = 0;
        if ( $max != $min )
        {
            $s = ( $l < .5 ) ? ( $max - $min ) / ( $max + $min ) :
                ( $max - $min ) / ( 2 - $max - $min );
            $h = ( $max != $r ) ? ( ( $max != $g ) ? 4 * ( $r - $g ) /
                ( $max - $min ) : 2 * ( $b - $r ) / ( $max - $min ) ) :
                ( $g - $b ) / ( $max - $min );
        }
        $h *= 60;
        if ( $h < 0 )
            $h += 360;
        return array( $h, $s, $l );
    }

Jeg synes det virker lidt bedre end mit oprindelige forsøg ;)
Avatar billede bigo Nybegynder
17. august 2006 - 22:26 #7
Takker.. Det virker sg for godt..

                            $r = substr($Colors, 0, 1);
                                $g = substr($Colors, 2, 3);
                                $b = substr($Colors, 4, 5);
                                $hsl = RGBtoHSL( $r, $g, $b );
                                $brightness = round( $hsl[2] * 100 );
                                $line .= "<td style='background-color:#$Colors;color:".(($brightness > 4 || $brightness == 0) ? "Gray" : "Black")."'>$brightness: $Resource_Status</td>";
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester