Community

9dots.de Webdesign Board

 

 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 

 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 


Mit PHP RGB-Farbangaben in Hexadezimal-Code umwandeln

 
Neues Thema eröffnen   Neue Antwort erstellen    9dots.de Webdesign Community Foren-Übersicht -> Coding-Tutorials
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
lennART h.
Mitglied
Mitglied


Angemeldet: 13.04.2006
Beiträge: 75
Wohnort: Kiel

BeitragVerfasst am: 13.04.2006, 21:03    Titel: Mit PHP RGB-Farbangaben in Hexadezimal-Code umwandeln Antworten mit Zitat
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 Auf den Arm nehmen )
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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Yada
Mitglied
Mitglied


Angemeldet: 08.06.2004
Beiträge: 267

Interessen: zuviel

BeitragVerfasst am: 13.04.2006, 21:05    Titel: Antworten mit Zitat
Fehlt da nicht ein

Code:
$hex_str = "";


vor der Foreach-Schleife? Überrascht ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
lennART h.
Mitglied
Mitglied


Angemeldet: 13.04.2006
Beiträge: 75
Wohnort: Kiel

BeitragVerfasst am: 13.04.2006, 21:14    Titel: Antworten mit Zitat
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rey
Mitglied
Mitglied


Angemeldet: 24.07.2004
Beiträge: 810
Wohnort: Bad Homburg
Interessen: synth ;)

BeitragVerfasst am: 14.04.2006, 10:19    Titel: Antworten mit Zitat
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
lennART h.
Mitglied
Mitglied


Angemeldet: 13.04.2006
Beiträge: 75
Wohnort: Kiel

BeitragVerfasst am: 14.04.2006, 11:38    Titel: Antworten mit Zitat
Okay ... Geschockt Mit den Augen rollen

Werde die gewünschten Erklärungen dann, sobald ich Zeit dafür finde hinzufügen.

// ... ich hoffe, dass das ausreichend ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rey
Mitglied
Mitglied


Angemeldet: 24.07.2004
Beiträge: 810
Wohnort: Bad Homburg
Interessen: synth ;)

BeitragVerfasst am: 14.04.2006, 20:27    Titel: Antworten mit Zitat
Na bitte, so kann ein Anfänger doch auch gleich was damit anfangen - sehr schön! Klatschen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
atto
Newcomer
Newcomer


Angemeldet: 13.06.2012
Beiträge: 2


BeitragVerfasst am: 13.06.2012, 03:25    Titel: Antworten mit Zitat
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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dick3rl3
Mitglied
Mitglied


Angemeldet: 06.08.2004
Beiträge: 1923
Wohnort: Berlin
Interessen: Webdesign, Musik

BeitragVerfasst am: 13.06.2012, 22:41    Titel: Antworten mit Zitat
wat?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen MSN Messenger
Xenon.ch
Mitglied
Mitglied


Angemeldet: 31.12.2003
Beiträge: 298


BeitragVerfasst am: 14.06.2012, 20:26    Titel: Antworten mit Zitat
wieder mal alte threads hervor hol'n Mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    9dots.de Webdesign Community Foren-Übersicht -> Coding-Tutorials Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Board Software by phpBB © 2001, 2005 phpBB Group. Impressum
Dominik Wuttke - Moritz Münchmeyer - Joachim Nagel GbR.
AGB