Fit4Php – Php Tutorial - Php für Einsteiger und Fortgeschrittene
Grafikoperationen
Erstellen von Grafiken

Nicht nur Texte in Form von HTML-Seiten können mit PHP ausgegeben werden, sondern beliebige Dateien, die sich im Browser anzeigen lassen. Mit PHP sind eine Reihe an Funktionen mitgeliefert, mit denen man einige Dateitypen erstellen kann. Wir möchten uns in diesem Kapitel mit Grafiken beschäftigen und erfahren, wie GIF,PNG oder JPEG-Bilder von PHP verarbeitet bzw. erzeugt werden.

Einführung in die Grafikfunktionen

Fangen wir am Besten mit einem kleinen Beispiel an:

<?php
// Beispiel für ein simples Bild
header(“Content-type: image/png”); // Mime-Type setzen
$im = imagecreate(155,155); // Erstellt ein rechteckiges
// Bild mit 155 Pixel Kantenlänge
$background_color = ImageColorAllocate ($im, 255, 255, 255);
// erste Farbe ist Hintergrundfarbe
$blue = imagecolorallocate($im, 0, 128, 255); // Blau
$red = imagecolorallocate($im, 255,0,0); // Rot
$yellow = imagecolorallocate($im, 255,255,0); // Gelb
// drei gefüllte Rechtecke
imagefilledrectangle ( $im, 5, 5, 100,100,$red);
imagefilledrectangle ( $im, 75, 75, 150,150,$blue);
imagefilledrectangle ( $im, 85, 20, 140,60,$yellow);
imagepng($im); // Das Bild als PNG-Bild ausgeben
imagedestroy($im); // Alle Resourcen, die wegen des Bildes gehalten werden, freigeben.
?>

Die Bildschirmausgabe wird wie folgt aussehen:

Das Browserfenster

Da jede Zeile in dem obigen Programm kommentiert ist, möchte ich hier darauf verzichten, näher darauf einzugehen und möchte direkt hier weitermachen.

Grafischer Counter

Wir möchten gerne den im vorherigen Kapitel erstellten Counter grafisch darstellen, so dass er toller aussieht. Zusätzlich bekommen wir die Funktionalität, dass wir ihn auch extern einbinden können, d.h. wir können aus HTML-Seiten heraus eine Grafik referenzieren und der Counter erscheint auf der HTML-Seite.

Wir erzeugen uns eine Rohvorlage für den Counter. In diese Rohvorlage wird später der Counter hineingebettet. Ich habe einmal eine ganz einfache Rohvorlage erstellt:

Rohvorlage des Counters

Zunächst macht das Skript dasselbe wie unser vorheriges Counterskript. Im Ausgabeteil gibt es jedoch den Counter nicht mehr einfach aus, sondern es wird die Rohvorlage eingelesen und der Counter an die entsprechende Stelle in dem Bild gesetzt.

<?php
// —————–
// Counterteil
// —————–
$counterfile = fopen (“stand.txt”,“r+);
flock ($counterfile,LOCK_EX);
$canWrite = false;
// Solange warten bis die Datei für das Schreiben freigegeben ist…
while (!$canWrite) {
$canWrite = flock($counterfile, LOCK_EX);
}
// Nun haben wir einen exklusiven Zugriff und wir können den
// Counter auslesen und anschließen wieder in die Datei schreiben
$counter = fgets ($counterfile);
$counter = $counter + 1;
fseek ($counterfile,0); // zurück auf Position 0
// obiger Befehl wird benutzt, um den Dateizeiger zu bewegen
fputs ($counterfile,$counter);
fclose ($counterfile);
// ——————
// Ausgabeteil
// ——————
Header (“Content-type: image/png”);
$im = ImageCreateFromPNG (“rohcounter.png”); // öffnen der Rohdatei
$white = ImageColorAllocate ($im, 255, 255, 255); // weißer Hintergrund
$black = ImageColorAllocate ($im, 0, 0, 0); // schwarze schrift
ImageTTFText ($im, 12, 0, 60, 50, $black, “arial.ttf”,
$counter); // die Datei arial.ttf mit der Schrift muss
// - falls nicht vorhanden - im Verzeichnis liegen
ImagePng ($im); // Als PNG ausgeben
ImageDestroy ($im); // Resourcen freigeben
?>

Das Ergebnis sieht nun wie folgt aus (Dies ist ein statisches Bild und es wird nicht gezählt.):

Das Ergebnis unserer Bemühungen

Zum Inhaltsverzeichnis