[PHP] Random Farbe

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
Tach Kollegen.

Hab da ein kleines Problem. Evtl hatte da wer von euch ne nette Idee ;)
Also erstmal die Ausgangslage: Ich habe ein kleines PHP Script welches Werte aus einer Datenbank ausliest und alle ausgelesenen Werte graphisch in ein Diagramm zeichnet (ein Balken Diagramm halt). Damit man die unterschiedlichen Balken von einander unterscheiden kann und man sie der Legende Zuordnen kann sind die Balken in unterschiedlicehr Farbe. Bisher habe ich einfach 15 unterschiedliche Farben von Hand definiert. Nun leider kommen jetzt immer mehr grosse Diagramme und ehrlich gesagt habe ich nicht den Nerv jetzt 100 Unterschiedliche Farben zusammenzustellen. Dachte mir da könnte man doch sicher ein Script basteln welches automatisch ne neue Farbe generiert. Natürlich ist das nicht gerade schwer aber ich hab ein Problem, wie ich sicherstellen kann, dass die Farben auch - fürs Menschliche Auge - unterschiedlich sind. Wäre ja denkbar schlecht, wenn 2 Balken die selbe Farbe haben. Das Script funktioniert im Moment mit RGB Farbwerten.

Also Problem nochmal kurz zusammengefasst: Ich bräuchte ein Script welches X unterschiedliche Farben definiert. Unterschiedlich im Sinne von, ein normaler Monitor kann die Farbunterschiede darstellen und das menschliche Auge kann diese auch unterscheiden ;)

Hat irgendwer nen brauchbaren Lösungsansatz. Bin für alle Vorschläge dankbar ;)

Gruss

Salzi
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Schreib die 256 Websicheren Farben in eine TXT Datei, lese die dann aus und lasse von PHP der Reihenfolge nach ausgeben. Wenn dir 256 Farben nicht reichen, musst du halt per Hand noch mehr Farben hinzuschreiben. Das geht natürlich auch wenn die Werte in einer DB stehen oder du am Anfang des Scripts ein Array mit den Werten erstellst. Denke aber dass die Variante mit der TXT Datei wohl die sinnvollste sein sollte. Immerhin kannst du die Farben so zu einem gewissen Grad selbst definieren.


Grüße
duderino
 
  • Like
Reaktionen: Salzi

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
Ja genau das isses doch :) Vielen Dank!
 

Sir Q

Rheinischer Winterrambour
Registriert
12.04.05
Beiträge
923
du kannst doch auch farben berechnen lassen. Ganz simples Beispiel:

$bgcolor = dechex(255 - ($nummer*$aanzahl));
$bgcolor .= $bgcolor.$bgcolor;


Das gibt dann einen HEX-Wert wie #2D2D2D aus. Nummer ist die „laufende Nummer” - $aanzahl im Prinzip 255 geteilt durch Anzahl der Unterteilungen. Der Hierdurch entstehende Graukeil reicht von Weiss 255 nach Schwarz …
~
Wenn du drei mal die Farbe unterschiedlich berechen lässt - kommst du auf beliebige Mischungen und kannst somit auch dynamisch die Farbvarianzen bestimmen. Du mußt damit nicht 100 mögliche Farben definieren - wenn du z.B. aus gestalterischen gründen alle grafiken auf der seite in blau gehalten hast, und auch die diagramme nur in dezenten blau-abstufungen laufen sollen …
 

Juuro

Schafnase
Registriert
07.11.05
Beiträge
2.256
@Salzi:
Wie werden bei dir die Diagramme gezeichnet?
 

b0rsten

Gast
Schreib die 256 Websicheren Farben in eine TXT Datei, lese die dann aus und lasse von PHP der Reihenfolge nach ausgeben. Wenn dir 256 Farben nicht reichen, musst du halt per Hand noch mehr Farben hinzuschreiben. Das geht natürlich auch wenn die Werte in einer DB stehen oder du am Anfang des Scripts ein Array mit den Werten erstellst. Denke aber dass die Variante mit der TXT Datei wohl die sinnvollste sein sollte. Immerhin kannst du die Farben so zu einem gewissen Grad selbst definieren.

sofern er die farben als html-code ausgibt is das wunderbar, da dann keine farbe zum einsatz kommt, welche nicht "unterstützt wird". wenn er aber seine diagramme mit der gdlib zeichnet, dann kann er ja wesentlich mehr farben nutzen, oder sehe ich das falsch?

so könnte man (bei verwendung von gdlib) einfach eine rgb-farbe zufällig erstellen...

Code:
$farbe = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));
ein array mit XXX zufälligen farben zu füllen ist dann auch kein problem mehr.... dann könnte man noch einen check einbauen, ob die farbe schon vorhanden ist... damit keine doppelt vorkommt...
 

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
ja richtig die Diagramme werden mit der GD-Lib gezeichnet mit dem imagecolorallocate. Bei b0rsten wäre das Problem das 2 gleiche oder sehr ähnliche Farben erstellt werden könnten. Und das war halt mein Problem. Ich habe jetzt einfach die 216 Websicheren Farben in ein Array geschmissen und lass diese da zufällig raus suchen. Klappt prima.

@Juuro: Präzisiere bitte deine Frage oder wolltest du auch nur wissen ob ich die GD-Lib verwende?

Danke allen für die Hilfe
 

Juuro

Schafnase
Registriert
07.11.05
Beiträge
2.256
@Juuro: Präzisiere bitte deine Frage oder wolltest du auch nur wissen ob ich die GD-Lib verwende?
Ich wollte einfach wissen, wie du PHP bzw. HTML dazu bringst dir aus Daten ein dynamisches Diagramm zu zeichnen. Machst du eine Tabelle als Balken und machst den dann je nach Daten unterscheidlich groß, oder wie doer was? :eek:
 

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
OK mal kurz die Funktionsweise:

Alle Daten können per Script in die Datenbank eingegeben werden.
Das Script welches das Diagramm zeichnet macht nun follgendes:

1. Alle Werte holen und den grössen Wert ermitteln
2. Dem grössten Wert wird dann eine fixe länge zugeordnet (Länge des Balken)
3. Alle anderen Werte werden in Bezug auf den längsten Balken richtig skaliert
4. Es wird eine geeignete x- Achse berechnet und die Achse wird demensprechend beschriftet
5. unten gibts dann noch eine kleine Legende.

Das script an und für sich ist zu chaotisch um es hier zu veröffentlichen. Ist einmal aus langeweile entstanden, leistet aber nun gute Dienste. Wurde somit auch demensprechend erweitert (darum wohl auch das Chaos)

bild.php


So sieht ein fertig generiertes Diagramm dann aus.

Kurz um PHP "malt" das Diagramm und wird in HTML normal als Bild eingebunden.

OK so die Erklärung?

Gruss

Salzi
 

b0rsten

Gast
irgendwie ist dein generiertes bild "häßlich", bau doch noch einen kleinen 3d-effekt ein? und nimm eine andere schriftart :)

dann würds mir besser gefallen ;)

--

gdlib is ne ganz feine sache, "spiele" auch wirklich gerne damit rum!
 

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
irgendwie ist dein generiertes bild "häßlich", bau doch noch einen kleinen 3d-effekt ein? und nimm eine andere schriftart :)

dann würds mir besser gefallen ;)

--

gdlib is ne ganz feine sache, "spiele" auch wirklich gerne damit rum!


zum glück ist sowas geschmacksache. Zugegeben vor allem die Hintergrundfarbe ist so betrachtet nicht gerade ein Augenschmaus. Ist allerdings auch die Hintergrundfarbe auf der Seite wo die Statistik eingeblendet wird. So passt das ganz schön zusammen.

Zum 3D Effekt: Hat die GD Lib da etwa ne einfache funktion oder muss man das alles mühsam über rechtecke zusammenfrickeln damit ein 3D Effekt entsteht. Nichts desto trotz sollten Diagramme doch einfach zu lesen sein und eine Funktion erfüllen und nicht ein designtechnisches Extra in einem Layout sein. Oder?

Zur Schriftart: Ich mag Verdana sehr und verwende sie im Netzt auch recht oft. Mit fällt auch kein Argument gegen diese Schriftart ein o_O

Gruss

Salzi
 

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
wenn ich mal wieder nicht schlafen kann vielleicht ;)
 

Juuro

Schafnase
Registriert
07.11.05
Beiträge
2.256
Ui, dankeschön! Werd ich mir mal anschaun! :)