lennART h. Mitglied
Angemeldet: 13.04.2006 Beiträge: 75 Wohnort: Kiel
|
Verfasst am: 13.04.2006, 21:03 Titel:
Mit PHP RGB-Farbangaben in Hexadezimal-Code umwandeln |
|
|
|
|
Hallo,
im folgenden eine kleine Funktion, die aus RGB-Farbangaben einen gültigen Hexadezimal-Code erstellst.
Die zu benutzenden PHP-Funktionen:
dechex - Umwandlung einer Zahl in Hex-Code.
strlen - Anzahl der Buchstaben in einer Zeichenkette.
strtoupper - Wandelt alle Buchstaben in einer Zeichenkette in Großebuchstaben um.
1. Einleitung:
Da ich die gesamte Funktionsweise besser gesagt den genauen Ursprung des Hexdezimalen Systems nun hier nicht hinkopieren will, denn das würde ich so oder so tun, hier ein Link, der dieses System hoffentlich genug und gut erklärt:
http://de.wikipedia.org/wiki/Hexadezimalsystem
Die Hexdezimale Angabe für eine Farbe ist meist einfacher und übersichtlicher. Da viele Grafikprogramme diesen Code ebenso kennen wie RGB-Farbangaben, steht vorallem die Übersichtlichkeit im Vordergrund.
2. Umwandlung
Um nun unsere RGB, also Rot-, Grün- und Blau-Anteile der Farbe in Hexdezimalen umzuwandeln, reservieren wir uns im Kopf ersteinmal für jeden Anteil einen zweistelligen Bereich in unserem Hexdezimalen-Code, kurz Hex-Code. Das beruht auf der Größe einer möglichen Farbangabe. Das Maximum liegt bei 255, somit benötigen wir nciht mehr als zwei Zeichen im Hex-Code.
Zu aller erst, werden die verschiedenen Anteile in die Funktion geben und mit dechex in Hex-Code umgewandelt. Dabei übergeben wir die einzellnen Hexdezimal Zahlen in Arrays, damit wir sie später einzellend in der foreach()-Schleife verarbeiten können. Die Funktion selber nennen wir rgb2hex, wobei dieser Name natürlich völlig optional ist.
Somit haben wir folgenden Code:
Code: | function rgb2hex($red,$green,$blue) {
$color[] = dechex($red);
$color[] = dechex($green);
$color[] = dechex($blue);
} |
Es ist zu beachten, dass ein Hex-Code für Farbangaben 6 stellig sein muss. Das heist, wenn die Umwandlung nur ein Zeichen ausgibt, weil der Farbanteil entsprechend gering ist, muss eine Null davor gestellt werden, um diesen Fehler zu vermeiden. Dies lösen wir mit strlen. Sie überprüft die Länge der Zeichenkette. Sollte sie zu kurz ausfallen, stellen wir einfach eine "0" vor den enstanden Code.
Dies geschieht in einer foreach Schleife, die für jede Farbe, also für jedes $color-Array den Bereich im Hex-Code an die Variable $hex_string mit ".=" anhängt. Die Schleife funktioniert so, dass sie das jeweilige Array nimmt und eine "Platzhalter-"Variable erstellt, die mit dem jeweiligen Arraywert gefüllt ist. Nach jedem Durchlauf wird der Zeiger dann immer auf das nächste Array gesetzt, sodass das nächste Array verarbeitet werden kann, sollte dieses vorhanden sein.
Vor dieser Schleife erstellen wir noch eine leere Variable, die wir nun mit Hex-Code auffüllen und später mi t return ausgeben. (Hier noch mal Danke an rey für die seltsam freundliche Hilfe )
Somit ist sieht unser Code nun wie folgt aus:
Code: | function rgb2hex($red,$green,$blue) {
$color[] = dechex($red);
$color[] = dechex($green);
$color[] = dechex($blue);
$hex_str = '';
foreach($color as $value) {
if(strlen($value) == 1) $value = '0'.$value;
}
return $hex_str;
} |
Am Ende wandeln wir schönheitshalber noch in eine nettere Darstellung um, in dem wir alle Buchstaben in Großbuchstaben umwandeln. Dies geschieht mit strtoupper.
Somit haben wir unseren fertige Funktion, die nun schlussendlich wie folgt aussachaut:
Code: | function rgb2hex($red,$green,$blue) {
$color[] = dechex($red);
$color[] = dechex($green);
$color[] = dechex($blue);
$hex_str = '';
foreach($color as $value) {
if(strlen($value) == 1) $value = '0'.$value;
$hex_str .= strtoupper($value);
}
return $hex_str;
} |
3. Schlusswort:
Jedem sollte auffallen, dass wir hier eine sehr simple Funktion gebaut haben. Ein guter Grund, sich eigene kleine Extras zu überlegen und einzubauen, wie zum Beispiel das Umwandeln in Großbuchstaben.
Für die Grundlage ist diese Funktion hoffentlich genug.
Ich hoffe, dass alles gut und ausfürhlich genug erklärt wurde. Falls ihr noch Fragen haben solltet, stehe ich euch in diesem Thread gerne zur Verfügung.
Feedback und/oder Verbesserungsvorschläge sind ebenfalls erwünscht.
Tutorial © by lennART h. Der Code steht natürlich zur freien Verfügung.
Zuletzt bearbeitet von lennART h. am 14.04.2006, 12:28, insgesamt einmal bearbeitet |
|
lennART h. Mitglied
Angemeldet: 13.04.2006 Beiträge: 75 Wohnort: Kiel
|
Verfasst am: 13.04.2006, 21:14 Titel:
|
|
|
|
|
Das ist hier völlig egal. Funktionieren tut es in der Funktion sowohl mit als auch ohne die zusätzliche Erstellung einer neuen Variable.
Das ist vergleichbar mit Arrays. Hier ist es ja üblich, dass neue Arrays mit array() erstellt werden. Wenn du aber einfach neue Daten wie folgt definierst ...
Code: | $test_arr[] = 'blabla'; |
erledigt PHP den nötigen Rest.
Aufpassen müsste man natürlich, wenn $hex_str über global in die Funktion übergeben wird und nicht angehängt werden soll. |
|
rey Mitglied
Angemeldet: 24.07.2004 Beiträge: 810 Wohnort: Bad Homburg Interessen: synth ;)
|
Verfasst am: 14.04.2006, 10:19 Titel:
|
|
|
|
|
Ich muss Yada völlig Recht geben: richtig wäre es vorher $hex_str zu deklarieren, da du sonst beim strikten Debuggen unter Garantie eine Notice zurückbekommst.
Desweiteren sehe ich in diesem "Tutorial" gar keine Erklärungen. Du hättest wenigstens mal erklären können, wie sich der HEX-Code zusammensetzt oder was deine Funktion in den einzelnen Passagen macht.
Ich bin mir nicht sicher, ob das Tutorial in diesem Zustand für einen Anfänger Sinn macht.
Nebenbei: ich habe die Deklaration von $hex_str oben im Code hinzugefügt. |
|
atto Newcomer
Angemeldet: 13.06.2012 Beiträge: 2
|
Verfasst am: 13.06.2012, 03:25 Titel:
|
|
|
|
|
Ich misch' mich hier mal dreist ein.
Wie ich gerade sehe ist das farblich mit dem Cover eurer CD abgestimmt. Ich weiß jetzt natürlich nicht, ob das explizit so vorgesehen ist oder gar so sein muss. Wie auch immer. Ich find' die Farben schrecklich. Auf dem CD-Cover störts mich gar nicht mal, aber auf 'ner Bühne kann ichs mir nicht vorstellen. Wirkt einfach zu steril, zu unlebendig. Ich würde ganz klar wärmere Farbtöne vorziehen. Eine andere Möglichkeit mehr Leben reinzubringen wäre vielleicht, den Schriftzug nicht so stur gerade auszurichten, sondern ein bisschen zu kippen. Keine Ahnung, ob sich das vernünftig umsetzen lässt. Außerdem stören die Punkte des Ä bei den "Untereinander"-Versionen ein bisschen, daher würde ich glaube ich am ehesten die senkrechte Version nehmen.
____________________________
Lunettes Chanel |
|