|
![ein Kapitel weiter](../weiter.gif)
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](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 :
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) (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](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](gd9.png)
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|