Dynamische Grafiken mit PHP Teil 1

PHP bietet nicht nur die Möglichkeit dynamische HTML-Inhalte zu generieren, es kann auch Grafiken erstellen. Dazu wird eine Erweiterung namens GD-Library benötigt. Die meisten Webhoster haben diese Library fertig installiert.
Im Prinzip ist die Erstellung von Grafiken mittels PHP eine überschaubare Angelegenheit, es werden für einfache Beispiele nur einige wenige Zeilen Code benötigt. Als erstes wird ein leeres Bild erstellt, die Funktion imagecreate(int x_size, int y_size) bzw. imagecreatetruecolor(int x_size, int y_size) (ab GD Version 2) erledigt dies für uns. Als Parameter werden lediglich Bildbreite sowie Bildhöhe des zu erstellenden Bildes erwartet. Zurückgegeben wird ein Handle auf die Grafik.

$breite = 100; //Bildbreite auf 100 Pixel setzen
$hoehe = 100; //Bildhöhe auf 100 Pixel setzen
$image = imagecreate($breite, $hoehe); //Leeres Bild erstellen

Noch ist das Bild leer, lediglich die Größe ist bereits festgelegt. Als nächstes soll der Hintergrund Blau eingefärbt werden. Dazu benötigen wir als erstes die Funktion imagecolorallocate(int im, int red, int green, int blue), die eine Farbe allokiert. Jede Farbe die verwendet wird muss zuvor mittels dieser Funktion für eine bestimmte Grafik allokiert werden. Die zu übergebenden Parameter setzen sich aus einem Handle auf die Grafik, dem Anteil an Rotwerten in der Farbe, dem Anteil an Grün sowie den Blauanteilen zusammen. Jeder Farbanteil wird durch einen Wert von 0 bis 255 repräsentiert, genau wie in einer RGB-Farbe.

Die Funktion zum Füllen des Hintergrundes mit einer Farbe lautet imagefill(int im, int x, int y, int col). Die Parameter x und y spezifizieren den Punkt ab dem die Grafik mit der gewünschten Farbe gefüllt werden soll.

Ein kniffliger Punkt ist das ausgeben des Bildes als Grafik. Da es sich nicht um eine HTML-Seite handelt muss der HTTP-Header abgeändert werden, damit der Browser weiß, dass eine Grafik gesendet wird. Dazu wird einfach mittels der header()-Funktion der HTTP-Header manipuliert.

Zum Schluss wird die Grafik ausgegeben, zum Beispiel als JPG. Es sind aber auch, je nach GD-Version, andere Formate wie GIF oder PNG möglich. In unserem Beispiel verwenden wir die JPG-Variante:

$breite = 100; //Bildbreite auf 100 Pixel setzen
$hoehe = 100; //Bildhöhe auf 100 Pixel setzen
$image = imagecreate($breite, $hoehe); //Leeres Bild erstellen
$color = imagecolorallocate($image, 0, 0, 255); //Farbe blau allokieren
imagefill($image, 0, 0, $color); //Hintergrund einfärben
header("Content-Type: image/jpeg"); //Header manipulieren
imagejpeg($image); //Bild ausgeben

Jetzt fügen wir in unser Beispielscript noch zwei weiße Linien ein, die sich in der Bildmitte treffen. Die Funktion imageline(int im, int x1, int y1, int x2, int y2, int col) ist uns dabei behilflich.

$breite = 100; //Bildbreite auf 100 Pixel setzen
$hoehe = 100; //Bildhöhe auf 100 Pixel setzen
$image = imagecreate($breite, $hoehe); //Leeres Bild erstellen
$color = imagecolorallocate($image, 0, 0, 255); //Farbe blau allokieren
imagefill($image, 0, 0, $color); //Hintergrund einfärben
$linecolor = imagecolorallocate($image, 255, 255, 255); //Farbe weiß allokieren
imageline($image, 0, 0, $hoehe, $breite, $linecolor); //Linie von Lo nach Ru
imageline($image, 0, $hoehe, $breite, 0, $linecolor); //Linie von Lu nach Ro
header("Content-Type: image/jpeg"); //Header manipulieren
imagejpeg($image); //Bild ausgeben

Für weitere geometrische Formen können Sie noch folgende Funktionen benutzen:

int imagedashedline(int im, int x1, int y1, int x2, int y2, int col)
int imagefilledpolygon(int im, array points, int num_points, int col)
int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col)
int imagepolygon(int im, array points, int num_points, int col)
int imagerectangle(int im, int x1, int y1, int x2, int y2, int col)
int imagesetpixel(int im, int x, int y, int col)