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