ein Kapitel zurück                                           ein Kapitel weiter

setPixel

Die Grundlegen Form einer jeden Grafikbibliothek ist setPixel. Diese Funktion setzt einen einzelnen Pixel an der gewünschten Position in der gewünschten Farbe.......

$red=$image->colorAllocate(255,0,0);
$image->setPixel(50,50,$red);

Hier wird an der Position x=50 und y=50 ein roter Pixel gesetzt. Der Null-Punkt liegt wie bei allen Zeichenfunktionen in GD linksoben.

line, dashedLine

Die Funktion wie man ein Linie zeichnet haben sie bereits schon kennen gelernt....

$myImage->line(0,0,150,150,$red); #line(x1,y1,x2,y2,farbe)   

Hier ziehen wir zum Beispiel ein rote Linie von der linken oberen Ecke (0,0) zur Position 150,150, was eine diagonale Linie ist. Genauso verwenden können sie die Funktion dashedLine, womit sie eine gestrichelte Linie ziehen. Eine andere Möglichkeit gestrichelte oder gepunktete Linien zu ziehen haben sie im Kapitel zuvor, mit der Funktion setStyle gesehen.

Hier nochmals ein Anwendungsbeispiel der 3 Funktionen........

use GD;

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

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

$image->fill(1,1,$black);

#Wir ziehen ein 50Pixel lange Linie mit 50 einzelen Pixeln
foreach(1..50){
 $image->setPixel($_,50,$white);
 }
#Wir ziehen ein Linie
$image->line(0,25,99,25,$white);
#Wir ziehen eine gestrichelte Linie
$image->dashedLine(0,75,99,75,$white);


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

So siehts aus:

Bild: gd10.png


rectangle

Diese Funktion haben wir schon mehr als einmal in Aktion gesehen. Mit dieser Funktion Zeichnen sie ein Rechteck von der linken oberen Ecke (x1,y1) zur rechten unteren Ecke (x2,y2) in einer bestimmten Farbe.....

$image->rectangle(x1,y1,x2,y2,$farbe);

Alternativ für die Farbe können sie auch gdBrushed, gdStyled, gdStyledBrushed, gdTiled verwenden.

filledRectangle

Mit filledRectangle wird ein Rechteck gezeichnet, genauso wie mit rectangle, nur das hier die Farbe nicht die Randfarbe darstellt sondern die Füllfarbe. Sehr gut dazu eignen würde sich auch gdTiled........

$image->filledRectangle(x1,y1,x2,y2,$fuellfarbe);

Hierzu nun ein Anwendungsbeispiel für rectangle und filledRectangle..........

use GD;

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

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

$image->rectangle(0,0,99,99,$black);
$image->filledRectangle(20,20,80,80, $red);


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

So siehts aus :

Bild: gd11.png


Mit dem GD-Modul ist es auch möglich Polygone zu zeichnen. Darauf will ich aber nicht so genau eingehen. Nur die einzelnen Funktionen..........

polygon, filledPolygon

Um ein Polygon zu zeichnen müssen sie diese erst mal anlegen.....

$polygon=new GD::Polygon;  #neues Polygon

Nun können sie die einzelnen Polygonpunkte mittels addPt(x,y) festlegen....

$polygon->addPt(0,0);
$polygon->addPt(50,40);
$polygon->addPt(30,80);
$polygon->addPt(0,0);

Wird das Polygon durch den letzten Vertex nicht geschlossen, schließt die Methode es für Sie. Sowohl reale Farbindizes als auch die Spezialfarben gdBrushed, gdStyled und gdStyledBrushed und gdTiled können angegeben werden.

filledPolygon funktioniert dabei wieder ganze genauso wie polygon, nur mit ein Füllfarbe als Farbangabe anstatt einen Rahmen um das Polygon. Hier ein Beispiel wie sie Polygone zeichnen können..........

use GD;

#neues Image
$image = new GD::Image(100,100);
$polygon=new GD::Polygon;

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

$polygon->addPt(0,0);
$polygon->addPt(50,40);
$polygon->addPt(30,80);
$polygon->addPt(0,0);

$image->filledPolygon($polygon,$red);

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

Und so siehts aus :

Bild: gd12.png


Weiter Funktionen für Polygone entnehmen sie bitte bei Bedarf aus der man-Pages von GD. Folgende werden sie dabei noch finden....



getPt,setPt,deletePt,toPt,length,vertices,bound,offset,map,scale,
transform

arc

Mit arc können sie Bögen, Kreise und Elipsen zeichnen.......

$image->arc(50,50,30,30,0,360, $farbe);

Die ersten beiden Zahlen (50,50) stellen das Zentrum da, wo sie die Zirkelspitze einstecken (wenn sie so wollen). Die nächsten beiden Maße (30,30) stellen die Höhe und Weite des Kreises, Bogens oder Ellipse da (in unserem Fall ein Kreis). Die nächsten beiden Werte sind der Startpunkt (0) und Endpunkt (360) unseres Kreises, Bogens oder Ellipse. Die Bedeutung der Farbe ist die gleiche wie immer. Auch hierzu ein kurzes Beispiel......

use GD;

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

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

$image->arc(30,50,25,25,0,360,$black);
$image->arc(45,50,25,25,0,360,$red);
$image->arc(60,50,25,25,0,360,$black);
$image->arc(45,50,60,40,0,360,$red);


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

Und so siehts aus :

Bild: gd13.png


fill, fillToBorder

fill haben wir ebenfalls schon sehr oft verwendet. 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 (entspricht dem "Farbeimer", den man in vielen Zeichenprogrammen findet). Sie können eine normale Farbe oder die Spezialfarbe gdTiled zum Flood-Fill mit Mustern verwenden.

Neu hingegen dürfte für Sie fillToBorder sein. Hierbei können sie die Farbe festlegen bei der das Füllen enden soll. Mit fill wurde ja das füllen beendet sobald irgendeine ander Farbegefunden wurde. Wollen wir das ganze doch mal an unserem Beispiel mit dem Kreisen zuvor anwenden............

use GD;

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

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

$image->arc(30,50,25,25,0,360,$black);
$image->arc(45,50,25,25,0,360,$red);
$image->arc(60,50,25,25,0,360,$black);
$image->arc(45,50,60,40,0,360,$red);

$image->fillToBorder(45,50,$red,$black);
$image->fillToBorder(30,50,$black,$red);
$image->fillToBorder(60,50,$black,$red);
$image->fillToBorder(45,35,$red,$black);


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

Und so siehts aus :

Bild: gd14.png


ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf