Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 18 Images
  gp 18.1 Image_Barcode
  gp 18.2 Image_Text
  gp 18.3 Image_GIS
  gp 18.4 Image_Color
  gp 18.5 Image_Graph
    gp 18.5.1 Farben
    gp 18.5.2 Linien
    gp 18.5.3 Füllungen
    gp 18.5.4 Schriftarten
    gp 18.5.5 Die Achsen
    gp 18.5.6 Gitternetz
    gp 18.5.7 Diagrammtypen


Rheinwerk Computing

18.4 Image_Color  toptop


Besprochene Version: 1.0.1 Lizenz: PHP-Lizenz 2.02
Klassendatei(en): Image/Color.php

Die Arbeit mit Farben ist nicht immer einfach. Zwar ist der Farbraum, der durch das RGB-Modell beschrieben wird, nicht sehr kompliziert, aber wenn Sie eine Farbe vorgeben und deren Helligkeit ändern wollen, dann erfordert das schon ein wenig Mathematik oder Erfahrung im Umgang mit Farben.

Dieses und ähnliche Probleme löst das Paket Image_Color für Sie.

Ein Teil der Methoden kann statisch genutzt werden, was auch sinnvoll erscheint. Wenn Sie beispielsweise nur einen Farbwert konvertieren wollen, ist es nicht unbedingt notwendig, eine Objektinstanz abzuleiten.

Zum Ersten sind hier die Methoden rgb2hex() und hex2rgb() zu nennen, mit denen Sie eine RGB-Farbangabe in die hexadezimale Darstellung umwandeln können und umgekehrt. Die erste Methode bekommt ein Array übergeben, das aus drei Feldern besteht. Hierbei entspricht das erste Element dem Wert der Farbintensität für Rot, das zweite entspricht dem Grün-Anteil und das dritte dem Blau-Anteil. Jeder der Werte darf zwischen 0 und 255 liegen. Der Rückgabewert der Methode ist ein String mit der hexadezimalen Darstellung des Farbwertes.

require_once('Image/Color.php'); 
$rgb=array (255,255,0); 
echo Image_Color::rgb2hex($rgb); 
// Gibt FFFF00 aus

hex2rgb() stellt die Umkehrfunktion dazu dar. Sie bekommt einen String wie '#FA0FAE' oder 'FA0FAE' übergeben und liefert ein Array mit den Werten der drei Farbkanäle zurück.

Ähnliche Funktionen sind für das HSV- bzw. HSB-Farbmodell definiert. In diesem Farbmodell wird eine Farbe durch die Angaben für den Farbton (Hue), Sättigung (Saturation) und Helligkeit (Brightness, Value) definiert. Der Farbton wird hierbei als Winkel auf dem Farbkreis definiert (0° = Rot, 60° = Gelb, 120° = Grün, 180° = Cyan, 240° = Blau und 300° = Magenta). Die Sättigung und die Helligkeit werden jeweils in Prozent angegeben.

Da es aus Sicht eines Programmierers ein wenig ungewöhnlich ist, mit Farben im HSV-Modell zu arbeiten, sind nur Methoden vorgesehen, die von HSV nach RGB bzw. Hex konvertieren. hsv2rgb() und hsv2hex() bekommen beide die drei Werte einzeln als Parameter übergeben und konvertieren sie. Der Rückgabewert ist im ersten Fall ein Array und im zweiten ein String.

Eine weitere Konvertierungsfunktion ist color2RGB(), die eine Farbe in einer HTML-Angabe als Parameter akzeptiert und einen RGB-Wert als Array zurückgibt. Der Parameter dürfte also beispielsweise so

 '#FF00AE'

oder so

 'red'

aufgebaut sein. Kann ein Wert nicht konvertiert werden, weil der Farbname nicht existiert oder das # bei einer hexadezimalen Angabe fehlt, gibt die Methode ein Array mit drei Nullen zurück. Wenn Sie wissen, dass die Farbe auf jeden Fall über ihren Namen definiert wird, können Sie auch die Methode namedColor2RGB() nutzen.

Die letzte Konvertierungsfunktion ist percentageColor2RGB(). Sie bekommt einen String mit drei Prozentzahlen übergeben, der z. B. so aussehen könnte: '70  %,30  %,80  %'. Dieser String wird anhand der Kommata aufgeteilt, und die einzelnen Prozentzahlen werden in die dezimalen Äquivalenzen umgerechnet und als Array zurückgegeben. Ein Wert größer als oder gleich 100 resultiert in der Zahl 255, wohingegen ein Wert kleiner gleich 0 als 0 zurückgegeben wird.

Da Farben oft bei der Verarbeitung von Bildern zum Einsatz kommen, sieht das Paket eine statische Methode vor, um einem Bild eine Farbe direkt zuweisen zu können. allocateColor() bekommt eine Referenz auf ein Bild und zusätzlich eine HTML-konforme Farbangabe übergeben.

require_once('Image/Color.php'); 
$img = imagecreate(400,400); 
$farbe = 'red'; 
// $farbe = '#FF0000'; Waere auch moeglich 
Image_Color::allocateColor($img, $farbe);

Eine weitere sehr interessante Member-Funktion ist getTextColor(). Sie nimmt sich der Frage an, ob eine Text-Farbe, die als erster Parameter übergeben wird, besser auf einem hellen oder einem dunklen Hintergrund zu lesen ist. Übergeben Sie nur die Text-Farbe, so liefert die Methode FFFFFF oder 000000 zurück, abhängig davon, auf welcher Farbe die Schrift besser zu lesen ist. Da ein rein weißer oder schwarzer Hintergrund nicht immer gewünscht ist, können Sie noch zwei weitere Farbwerte übergeben, von denen die Methode dann den zurückliefert, der besser harmoniert. Alle Parameter sind in diesem Fall hexadezimal kodiert zu übergeben.

Für alle folgenden Funktionen benötigen Sie jeweils ein Objekt der Klasse Image_Color. Ein Objekt dieser Klasse kann jeweils zwei Farbwerte verwalten. Um diese Farben an das Objekt zu übergeben, ist die Methode setColors() vorgesehen. setColors() erwartet zwei hexadezimale Farbwerte, die dann im Objekt abgelegt werden.

Die Methode changeLightness() gibt Ihnen die Möglichkeit, die Helligkeit der beiden enthaltenen Farben zu verändern. Intern werden die Farben, aufgeteilt in ihre Farbkanäle, dezimal abgespeichert. Wenn Sie der Methode einen positiven Wert übergeben, wird er auf alle Farbkanäle aufaddiert, und ein negativer Wert wird von allen subtrahiert. Da jeder Farbkanal einen Wert zwischen 0 und 255 haben darf, kann es durchaus zu Farbverfälschungen kommen, wenn einer der Kanäle den maximalen oder minimalen Wert erreicht hat und sich nur noch die anderen verändern. Diese Methode gibt noch keinen Wert zurück, was aber die beiden nächsten Funktionen machen. Bei der Nutzung von Farben im Internet stellt sich unter Umständen die Frage, ob diese zu den 216 websicheren Farben gehören. Wenn Sie die Methode setWebSafe() mit dem Parameter true aufrufen, sind alle zurückgegebenen Farben websicher. Andernfalls werden einfach die berechneten Werte genutzt, unabhängig davon, ob sie websicher sind oder nicht.

Um herauszufinden, welche Farben zwischen den beiden Farben liegen, die im Objekt abgespeichert sind, steht getRange() zur Verfügung. Übergeben Sie ihr keinen Parameter, liefert sie Ihnen ein Array mit zwei Farben zurück, die zwischen den beiden Farben liegen, die im Objekt gespeichert sind. Sie können allerdings auch eine Zahl übergeben, um zu spezifizieren, wie viele Zwischenschritte berechnet werden sollen. Dies kann z. B. eine sehr hilfreiche Methode sein, wenn Sie einen Schatten oder einen Farbverlauf generieren wollen.

mixColors(), die letzte definierte Methode, mischt die beiden Farben, die in dem Objekt enthalten sind, und gibt den berechneten Mischton als hexadezimalen Code zurück. Sie können dieser Methode auch direkt zwei hexadezimale Farbcodes übergeben. In diesem Fall würden diese Farbtöne gleichzeitig im Objekt abgelegt, so dass die Methode setColors() nicht genutzt werden muss.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de