ein Kapitel zurück                                           ein Kapitel weiter

setBrush, gdBrushed

Mit dem Werkzeug setBrush können sie sich eigene Pinsel erschaffen. So wie sie das bei gimp oder anderen Zeichenprogramme her kennen dürften. Zuerst müssen sie natürlich für den Brush ein neues Image erstellen.....

$brush = new GD::Image(5,5)

Hier erstellen wir einen neuen Brush mit 5x5Pixel. Als nächstes können wir auf diesem 5x5Pixel einen Brush unserer Wahl erstellen. Allozieren sie Farben und Zeichnen sie darauf Ihren Brush. Wenn sie Ihren Pinsel fertig haben können sie ein neues Image erzeugen auf dem sie den Pinsel ausprobiere können. Bevor sie diesen aber einsetzen müssen sie in initialisieren auf unserer Zeichnung mittels........

$image->getBrush($brush);

Jetzt können sie mit dem Pinsel Zeichenen wie gewohnt........

$image->rectangle(70,10,90,90,gdBrushed);

...nur müssen sie anstatt der Farbe am Ende gdBrushed verwendet. Diese Funktion beinhaltet den zuvor initialisierten Pinsel. Wollen wir uns ein Beispiel dazu ansehen..........

use GD;

# Brush mit diagonalem Muster
$diagonal_brush = new GD::Image(5,5);
$white = $diagonal_brush->colorAllocate(255,255,255);
$blue = $diagonal_brush->colorAllocate(0,0,255);
$diagonal_brush->transparent($white);
$diagonal_brush->line(0,4,4,0,$blue); # Diagonal von Nord nach Ost

# Brush2 mit diagonalem Muster
$diagonal_brush2 = new GD::Image(5,5);
$white = $diagonal_brush2->colorAllocate(255,255,255);
$red = $diagonal_brush2->colorAllocate(255,0,0);
$blue = $diagonal_brush2->colorAllocate(0,0,255);
$diagonal_brush2->transparent($white);
$diagonal_brush2->line(4,0,0,4,$red);
$diagonal_brush2->line(0,2,2,0,$blue);

#Fläche zum Zeichnen erstellen
$image = new GD::Image(100,100);
# Brush setzen.
$image->setBrush($diagonal_brush);
# Einen Kreis mit der Brush zeichnen.
$image->arc(30,50,50,50,0,360,gdBrushed);
#Brush2 setzen
$image->setBrush($diagonal_brush2);
#Ein Rechteck zeichnen
$image->rectangle(70,10,90,90,gdBrushed);


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

So siehts aus :

Bild: gd6.png


Sie können gerne mit den Brushes (Pinseln) herumspielen als Übung.

setStyle, gdStyled

Hiermit können sie "gestylte" Linien mit einer bestimmten Anordnung der Farbe ziehen. Beispielsweise gestrichelte oder gepunktete Linien. Die Funktion funktioniert ähnlich wie eben schon bei setBrush. Hier ein Anwendungsbeispiel...

use GD;

$image = new GD::Image(100,100);

$white=$image->colorAllocate(255,255,255);
$black=$image->colorAllocate(0,0,0);
$red  =$image->colorAllocate(255,0,0);
$blue =$image->colorAllocate(0,9,255);
@line_style1 = ($black, $black, $black, $white, $white, $white);
@line_style2 = ($red,$red,$red,$white,$black,$white,$blue,$blue,$blue,$white);
@line_style3 = ($black,$white,$white);

#Style1 setzen
$image->setStyle(@line_style1);
#Ein Rechteck zeichnen
$image->rectangle(70,10,90,90,gdStyled);

#Style2 setzen
$image->setStyle(@line_style2);
#Ein weiteres Rechteck setzen (Strich-Punkt)
$image->rectangle(20,10,40,90,gdStyled);

#Style3 setzen
$image->setStyle(@line_style3);
#Kreis Zeichnen (gepunktet)
$image->arc(55,50,20,20,0,360,gdStyled);

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

So siehts aus :

Bild: gd7.png


Außer den zu allozierenden Farben können sie noch gdTransparent verwenden um Löcher in die Zeile einzbinden. Also Beispielsweise.......

@line_style = ($black,$black,gdTransparent,gdTransparent);

Es besteht außerdem noch die Möglichkeit gdStyled und gdBrushed zu kombinieren in dem sie gdStyledBrushed angeben. Wir nehmen dies hier aber nicht durch.

setTile, gdTiled

Mit setTile können Umrisse oder Flood-Fills mit einem Muster zeichnen. Das Muster laden wir einfach als weiter Image. Das Muster wird wiederholt ausgegeben ("gekachelt"), um den benötigten Platz zu füllen, womit ein "Tapeteneffekt" erzielt wird. Sie müssen setTile aufrufen, um das jeweilige Füllmuster zu definieren, das Sie zum Zeichnen verwenden wollen, während Sie die gdTiled-Farbdetails festlegen.

Wir wollen hier folgende Tile verwenden.....

Bild: multi112.jpg
(multi112.jpg)


Es handelt sich um eine jpeg-Grafik, also laden wir dies mit newFromJpeg. Hier ein einfaches Anwendungsbeispiel.......

use GD;

#Tile laden
open(JPEG,"./multi112.jpg");
$tiled=newFromJpeg GD::Image(JPEG) or die ("Konnte Datei nicht öffnen\n");
close(JPEG);
#neues Image
$image = new GD::Image(100,100);

$black=$image->colorAllocate(0,0,0);
$white=$image->colorAllocate(255,255,255);

$image->transparent($black);

#Tiled setzen
$image->setTile($tiled);
#Ein Rechteck zeichnen
$image->rectangle(70,10,90,90,gdTiled);

#Rechteckrahmen mit Tile erzeugen
$image->rectangle(20,10,40,90,$white);
#Rechteck mit Tile füllen
$image->fill(22,12,gdTiled);

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

So siehts aus :

Bild: gd8.png


Auf der rechten Seite haben wir unser Rechteck mit dem Tile-Muster gefüllt und auf der Linken haben wir anstatt eine Farbe gdTiled für den Rahmen verwendet.

Natürlich können sie auch das ganze Image mit dem Hintergrund füllen....

use GD;

#Tile laden
open(JPEG,"./multi112.jpg");
$tiled=newFromJpeg GD::Image(JPEG) or die ("Konnte Datei nicht öffnen\n");
close(JPEG);
#neues Image
$image = new GD::Image(350,64);
#Tiled setzen
$image->setTile($tiled);
#Komlettes Image füllen
$image->fill(50,50,gdTiled);


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

So siehts aus :

Bild: gd9.png

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf