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
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
17. august 2006 - 13:54
#1
#xxxxxx er rgb ;P det er i hexadecimal #(r)xx(g)xx(b)xx :)
17. august 2006 - 14:55
#2
Men hvordan beregner man om den er lys eller mørk?
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>"; }
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...
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 );
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 ;)
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>";
Vi tilbyder markedets bedste kurser inden for webudvikling