php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.01.2010, 00:35  
Erfahrener Benutzer
 
Registriert seit: 20.01.2010
Beiträge: 108
PHP-Kenntnisse:
Fortgeschritten
feeela befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Farben: Helligkeit aus hex-Wert bestimmen

Problemstellung:
Auf einer Webseite haben angemeldete Nutzer die Möglichkeit für bestimmte Bereiche die Hintergrundfarben auszuwählen. Diese werden als 6-stellige hexadezimal-Angabe gespeichert. Nun soll je nach Helligkeit der jeweiligen Hintergrundfarbe eine passende Schriftfarbe gewählt werden. Es soll dabei kein passender (Komplementär-)Kontrast, sondern schwarz oder weiß verwendet werden.

Frage:
Wie komme ich vom hex-Wert auf den Wert der Helligkeit?
Ich weiß nicht genau ob mir hier mathematische Kenntnisse oder der Umgang mit Farben fehlen.

Momentaner eigener Lösungsansatz:
Der hex-Wert wird in drei RGB-Werte konvertiert und davon der Durchschnitt ermittelt. Liegt dieser unter 127 wird weiß als Schriftfarbe verwendet.
Oder ist der Durchschnitt der RGB-Werte schon tatsächlich die Helligkeit?

PHP-Code:
/**
 * @param string $backgroundColor
 * @return string foreground color
 */
function getForegroundColor($backgroundColor)
{
    
$bgColor html2rgb($backgroundColor);
    
$average = ($bgColor[0] + $bgColor[1] + $bgColor[2]) / 3;
    if(
$average 127)
    {
        return 
'000';
    }
    else
    {
        return 
'fff';
    }

Die Funktion html2rgb() stammt von anyexample.com und liefert anhand der HEX-Notation einer Farbe ein Array mit den drei Farbwerten (RGB, dezimal).


Herzlichen Dank und Gruß,

Feeela
feeela ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.01.2010, 00:38  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Das hier könnte interessant sein: Luminanz – Wikipedia

Nach den Formeln ist Grün 'ne ganze Ecke "heller" als Blau.

Geändert von mermshaus (21.01.2010 um 01:07 Uhr). Grund: da stehen mehrere Formeln, Plural
mermshaus ist offline   Mit Zitat antworten
Alt 21.01.2010, 01:00  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Ich benutz diese Formel:
Zitat:
(0.2126 * RED) + (0.7152 * GREEN) + (0.0722 * BLUE)
Werte kleiner (oder wars groesser?) als 127 sind hell, andernfalls dunkel (Basis 255!). Funktioniert soweit grundsaetzlich. Den Schwellwert kann man aber moeglicherweise noch optimieren.

Statt einer Funktion wuerde ich eine Klasse implementieren. Eine Farbe kann naemlich relativ viele Eigenschaften und Ausgabeformate habe.

Geändert von Chriz (21.01.2010 um 01:03 Uhr).
Chriz ist gerade online   Mit Zitat antworten
Alt 21.01.2010, 01:38  
Erfahrener Benutzer
 
Registriert seit: 20.01.2010
Beiträge: 108
PHP-Kenntnisse:
Fortgeschritten
feeela befindet sich auf einem aufstrebenden Ast
Standard

Danke.

Ich habe jetzt mit den beiden Formeln aus dem WP-Luminanz-Artikel ein bisschen rumgespielt und habe mich nun für die zweitere "Gamma korrigierte" Variante entschieden (welche auch Chriz gepostet hat).
Als Schwellenwert bin ich jetzt bei 130 hängen geblieben.

Zitat:
Zitat von Chriz Beitrag anzeigen
Statt einer Funktion wuerde ich eine Klasse implementieren. Eine Farbe kann naemlich relativ viele Eigenschaften und Ausgabeformate habe.
Ja ich auch Dies ist aber (noch) nicht nötig (Zeit, Zeit, Zeit). Ich arbeite an einem übernommenen Projekt. Momentan ein Haufen Funktionen auf Contenido-Basis. Eine Neustrukturierung ist ab Mitte des Jahres geplant aber einige Funktionen sollten scheinbar vorher noch rein.
feeela ist offline   Mit Zitat antworten
Alt 21.01.2010, 09:26  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.167
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

theoretisch müsste es doch auch die Hälfte von 16.777.215 "hell" sein. Quasi einfach den Hex-Wert in Dezimal umrechnen. Geht bestimmt noch einfacher, aber so weit kann ich heute morgen nicht denken...
xm22 ist offline   Mit Zitat antworten
Alt 21.01.2010, 11:20  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Ne weitere Möglichkeit wäre, die RGB-Werte in HSV umrechen,dann hast du die Helligkeit als double zwischen 0 und 1.

Aber ich glaub die Lösung von Chris ist am besten für diesen Anwendungsfall.
draco88 ist offline   Mit Zitat antworten
Alt 21.01.2010, 11:28  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

PHP-Code:
<?php
class Anti_Color
{
    
/**
     * @see http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
     *
     * Do you mean brightness? Perceived brightness? Luminance?
     * Luminance (standard, objective): (0.2126*R) + (0.7152*G) + (0.0722*B)
     * Luminance (perceived option 1): (0.299*R + 0.587*G + 0.114*blue)
     * Luminance (perceived option 2, slower to calculate): sqrt( 0.241*R^2 + 0.691*G^2 + 0.068*B^2 )
     */
    
public function getBrightness()
    {
        
/*
         * Note also that all of these are probably for linear 0-1 RGB, and you probably have gamma-corrected 0-255 RGB.
         * They are not converted like you think they are [in the formula above].
         */
        
$r $this->getRed()   / 255;
        
$g $this->getGreen() / 255;
        
$b $this->getBlue()  / 255;

        
$brightness  = (0.2126 $r) + (0.7152 $g) + (0.0722 $b);
        
$brightness *= 255;

        return 
$brightness;
    }

    public function 
isBright()
    {
        return 
$this->getBrightness() > 127;
    }

    public function 
isDark()
    {
        return !
$this->isBright();
    }
    
    
// ...
}
?>
Chriz ist gerade online   Mit Zitat antworten
Alt 21.01.2010, 15:47  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Anti_Color
LOL. Immer wieder witzig, Dein Namespace.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 17.05.2012, 13:05  
Neuer Benutzer
 
Registriert seit: 28.05.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Beastofchaos befindet sich auf einem aufstrebenden Ast
Standard Kontrast verstärken/abschwächen

Hey Leute,
Ich weiß, es ist ein alter Thread, aber es passt einfach vom Thema. Hier der eigentliche Thread im Java-Forum, wo mit leider keiner weiterhelfen konnte:
Java-Forum - Kontrast in einem Bild erzeugen

Ich bin zwar gerade an einem Grafikprogramm mit JAVA, aber mir geht es nur um die Rechnung. Denn ich will, genauso wie in Paint.NET den Kontrast verändern können.
Das heißt, bei maximalen Kontrast Schwarz-Weiß, bei minimalen hat es ein sehr starken Grauton.
Nun weiß ich dank diesem Thread auch, wie ich die Luminanz berechne, um herauszufinden, ob ich bei hohem Kontrast überhaupt gegen Dunkel oder Hell streben muss. Ich kann jetzt zwar in egal welchem Fall und im RGB-Modell und im YUV-Modell für jedes einzelne Element des Farbmodells bestimmen, in welche Richtung es strebt (gegen 0 oder 255).

Bloß, hab ich jetzt mal bei Paint.NET den Kontrast ausgetestet, um zu schaun, ob ich mit einer "mathematischen Folge"(siehe Bilder) eine Formel bestimmen kann, um den Kontrast zu verändern. Bloß bewegen sich die Zahlen total arithmetisch.
Hab das auch erstmal nur bei leichtem Farben getestet:

Rot (RGB: FF0000)
Grün (RGB: 00FF00)
Blau(RGB: 0000FF)
Gelb (RGB: FFFF00)

Habt ihr evtl einen Ansatz, wie man da weiterkommt. Am besten wäre, wenn es eine allgemeine bekannte Formel wäre. Im Internet finde ich bisher nichts.

Würd mich auf Hilfe freuen, Thomas

PS: Ich hab zwar schon vorher Vorschläge bekommen, bloß erzeugen die kein Schwarz-Weiß, sondern so eine Art farblicher Kontrast, in dem die einzelnen Farbelemente im Farbmodell einfach zu FF oder 00 werden (sprich aus 00EA09 wird 00FF00).

Geändert von Beastofchaos (17.05.2012 um 13:27 Uhr).
Beastofchaos ist offline   Mit Zitat antworten
Alt 17.05.2012, 17:06  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Vielleicht hilft dir dieser Mail-Thread (möglicherweise auch nicht wirklich relevant, habe nur die ersten beiden Nachrichten überflogen):

- http://borland.newsgroups.archived.a...706264869.html

Für Leute, die dieses Spezialbetriebssystem mit Paint.NET nicht nutzen: Pinta scheint den Kontrast so zu berechnen, wie es gewünscht ist.

Also im Zweifel: https://github.com/PintaProject/Pinta (Konkret vielleicht: https://github.com/PintaProject/Pint...trastEffect.cs)
__________________
Blog | Buch | Kaloa

Geändert von mermshaus (17.05.2012 um 17:12 Uhr).
mermshaus ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] jeden 5ten Wert aus db löschen Crowz PHP Tipps 2009 22 14.01.2010 16:07
Überprüfen ob vorhanden und ob ein feld einen bestimmten wert hat setech Datenbanken 1 17.12.2009 09:40
Datensatz nach Wert ändern? krisi12345 Datenbanken 1 13.11.2009 20:47
Wert einer Funktion an andere Funktion übergeben Secondary PHP Tipps 2008 14 27.08.2008 10:36
<option> wert aus DB in Dropdown ausgeben, wo aktueller Wert checked Lapje PHP Tipps 2008 9 19.08.2008 11:22
Fester Wert bei Registrierung festlegen themr Datenbanken 1 07.03.2008 14:41
nach grösstem (unbekannten) Wert suchen lindner Datenbanken 2 20.08.2006 22:13
Wie diesen Wert in eine DB einfügen? Mike² Datenbanken 5 29.03.2006 23:57
array verarbeitung (schlag auf den hinterkopf) PHP Tipps 2007 9 16.11.2005 11:37
Vergleich von einem Wert, mit Werten aus einer Tabelle PHP Tipps 2005 14 01.11.2005 03:04
minus wert, plus wert in variable nutzen PHP Tipps 2005-2 5 22.10.2005 19:15
Problem mit anzeige aus DB, erst nach refresh aktueller wert PHP Tipps 2005 7 27.04.2005 19:42
kleinsten und größten wert ermitteln niffi PHP Tipps 2005 14 26.04.2005 12:42
Wert automatisch erhöhen PHP Tipps 2005 5 13.02.2005 16:25
[Erledigt] Problem: per klick auf Button Wert erhöhen/verringern HTML, Usability und Barrierefreiheit 7 07.10.2004 08:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
helligkeit einer farbe bestimmen, php farbe helligkeit, php helligkeit ermitteln, hex wert bestimmen, helligkeit einer farbe ermitteln, php helligkeit, php bildhelligkeit, html farbe helligkeit, farben helligkeit, php bild helligkeit, helligkeit einer farbe berechnen, hex helligkeit, hexwerte farben, helligkeit einer farbe php, farben hex, helligkeit aus hexadecimal, luminanz bestimmen, farbe helligkeit ermitteln, php durchschnitt helligkeit, html farben helligkeit

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:23 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum