ein Kapitel zurück                                           ein Kapitel weiter

Was bringt uns das beste Grafik-Modul wenn wir die einzelnen Elemente nicht mit der richtigen Farbe hervorheben können. Wie man Farbe alloziert haben sie im ersten Kapitel schon mal gesehen.........

$white = $myImage->colorAllocate(0,0,0);  #weiss 

Hier allozieren wir die Weise Farbe. Der Farbwert in den Klammern entspricht dabei den RGB-Farben (R,G,B) wie sie Ihn auch aus vielen Grafikprogrammen her kennen. Wobei die hellste Farbe Weis mit folgendem Wert belegt ist...

R=0, G=0, B=0,

...und die dunkelste Farbe (schwarz) mit.......

R=255, G=255, B=255

Wobei mit den Rot-Grün-Blau-Werten theoretisch mehr wie 16 Millionen Farben darstellbar sind (255*255*255).

Damit sie nicht andauernd herumprobieren oder herumrechnen müssen, welche Farbe sie nun benötigen, können sie sich ja auf dieser Webseite umsehen.....

http://gucky.uni-muenster.de/cgi-bin/rgbtab

Mittels....

$myImage->colorDeallocate($peachpuff);

...geben sie die Farbe vom Index wieder frei. Auf diese Art und weise können mehrere Farben wieder freigegeben werden. Beispiel......

use GD;

# Neues Image erzeugen.
$image = new GD::Image(200,100) or die ("Fehler bei newFromPng\n");

# Einige Farben bereitstellen.
$black = $image->colorAllocate(0,0,0);
$green = $image->colorAllocate(0,255,0);
$red   = $image->colorAllocate(255,0,0);
$grey = $image->colorAllocate(127,127,127);

# Hintergrund wird transparent und interlaced
$image->transparent($black);
$image->interlaced('true');

#Mittellinie grau
$image->line(0,50,200,50,$grey);

# Rechteck
$image->rectangle(0,50,20,30,$green);
$image->rectangle(20,50,40,40,$green);
$image->rectangle(40,50,60,5,$green);
$image->rectangle(60,50,80,70,$red);
$image->rectangle(80,50,100,80,$red);
$image->rectangle(100,50,120,90,$red);
$image->rectangle(120,50,140,10,$green);
$image->rectangle(140,50,160,20,$green);
$image->rectangle(160,50,180,5,$green);
$image->rectangle(180,50,199,70,$red);


$png = $image->png;
open(PNG,"> gd4.png") or die ("Fehler bei open.....\n");
# Einen Binär-Stream sicherstellen.
binmode PNG;
print PNG $png;
close(PNG);

So siehts aus :

Bild: gd4.png


Zur Einstimmung was noch alles kommt haben wir hier eine Sinnlose Positiv/Negativ-Statistik. Ich habe diese jetzt mal nicht mit Farbe gefüllt da es für Rechtecke ein spezielles Füllwerkzeug gibt (Kommt noch). Nun kommt der Kunde und will die negative rote Farbe aus den Balken haben. Dies können sie nun mit einem einfachen.....

$image->colorDeallocate($red);

...am Ende der Zeichnungen von Rechtecken setzen. Nun sind die Rechtecke anstatt rot, grau. Da der Mittelbalken ebenso grau ist. Die liegt am Flood Fill. Diese Methode füllt (Flood-Fill) Bereiche mit der angegebenen Farbe. Die Farbe breitet sich dabei beginnend bei Punkt (x,y) aus, bis sie durch ein Pixel in einer vom Ausgangs-Pixel verschiedenen Farbe gestoppt wird. Nun sieht das ganze folgendermaßen aus.........

So siehts aus :

Bild: gd5.png


Wollen sie diese Graue Farbe vermeiden, müssen sie die Mittellinie entfernen, oder sie setzen die Rechtecke immer einen Pixel über oder unter der Mittelline zum Start.

Weitere Methoden für die Farben habens sie mit.....

colorCloset

$apricot = $myImage->colorClosest(255,200,180);

Gibt den Index der Farbe zurück, deren Wert den übergebenen Rot-, Grün- und Blau-Komponenten am nächsten kommt. Wurden bislang keine Farben alloziert, wird -1 zurückgegeben.

colorExact

$rosey = $image->colorExact(255,100,80);
warn "Farbe wurde nicht definiert\n" if $rosey < 0;

Gibt den Index der Farbe zurück, deren Wert exakt den übergebenen Rot-, Grün- und Blau-Komponenten entspricht. Kommt eine solche Farbe in der Farbtabelle nicht vor, wird -1 zurückgegeben.

colorsTotal

$maxColors = $image->colorsTotal;
print "Es wurde $maxColors Farben definiert\n";

colorsTotal gibt die Anzahl der mit colorAllocate allozierten Farben zurück.

getPixel und rgb

$index = image->getPixel(20,100);
($r,$g,$b) = image->rgb($index);
$mycolor=image->colorAllocate($r,$g,$b);

Mit getPixel bekommen sie den Farbwert zurück, dessen Punkt sie angeben. Mit der Funktion rgb() können sie diesen Farbindex anschließend gleich weiterverwenden. rgb() liefert Ihnen ein Liste der RGB-Farben zurück.

transparent

$image->transparent($white);

Die Farbe die sie als Transparent angeben sind im Image unsichtbar. Geben sie -1 an wird Transparent ausgeschalten.

Zugegen diese Kaptitel war jetzt nur ein Schnelldurchlauf der man-Pages, aber in den nächsten Kapiteln gibt es wieder mehr Beispiele. Diese Farbfunktionen finde sprechen aber für sich und Bedürfen eigentlich kaum eines Beispieles.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf