Dynamische Grafiken mit PHP Teil 2
Texte in Grafiken einfügen Zuerst erstellen wir ein Gerüst, in das wir weiteren Code einfügen. Das Gerüst soll eine leere Grafik mit weißem Hintergrund erstellen und sie an den Browser senden $breite = 300; //Bildbreite auf 100 Pixel setzen $hoehe = 300; //Bildhöhe auf 100 Pixel setzen $image = imagecreate($breite, $hoehe); //Leeres Bild erstellen $color = imagecolorallocate($image, 255, 255, 255); //Farbe weiß allokieren imagefill($image, 0, 0, $color); //Hintergrund einfärben header("Content-Type: image/jpeg"); //Header manipulieren imagejpeg($image); //Bild ausgeben | Speichern Sie die Datei und rufen Sie sie über den Webbrowser auf. Wie erwartet erscheint eine 300 x 300 Pixel große, weiße Grafik. Als nächstest soll ein Text in der Grafik erscheinen. Einfache Schriften lassen sich mittels der Funktion imagestring(int im, int font, int x, int y, string s, int col) augeben. Der Parameter im steht für das Handle der Grafik in die der Text geschrieben werdem soll, so wie es bei den meisten image* Funktionen der Fall ist. font ist ein interessanterer Parameter. Er beschreibt die Schriftgröße der verwendeten Standardschrift. Gültige Werte sind 1, 2, 3, 4 und 5, wobei 5 die maximale Größe ist. An welcher Stelle der String ausgegeben werden soll wird über die Parameter x und y festgelegt. Die Koordinate gibt die linke obere Ecke des abzubildenen Strings an.  Der zu zeichnende String muss an der Stelle des Parameters s übergeben werden. Die Textfarbe wird durch col beschrieben. Wir erweitern unser Beispiel. Es soll ein String "Hallo Welt!" an der Position x = 100 und y = 100 in der Farbe rot ausgegeben werden:  $breite = 300; //Bildbreite auf 100 Pixel setzen $hoehe = 300; //Bildhöhe auf 100 Pixel setzen $image = imagecreate($breite, $hoehe); //Leeres Bild erstellen $color = imagecolorallocate($image, 255, 255, 255); //Farbe weiß allokieren $textcolor = imagecolorallocate($image, 255, 0, 0); imagefill($image, 0, 0, $color); //Hintergrund einfärben imagestring($image, 5, 100, 100, "Ein String", $textcolor); header("Content-Type: image/jpeg"); //Header manipulieren imagejpeg($image); //Bild ausgeben | imagestring hat zwei Nachteile: Es kann kein Schrifttyp angegeben werden un dieSchriftgröße ist auf fünf begrenzt. Es gibt noch einen anderen Weg Texte in Grafiken zu bringen, der kaum aufwändiger ist. Wir setzen statt der Funktion imagetext imagettftext(int im, int size, int angle, int x, int y, int col, string fontfile, string text) ein. Sie besitzt einige Parameter näher, genau die, die wir zur besseren Textausgabe benötigen. Für size können wir eine beliebige Schriftgröße einsetzen. angle lässt Drehungen des Textes zu. Hierfür muss ein Wert zwischen 0 und 360 angegeben werden. Wie sich erahnen lässt handelt es sich um Gradzahlen. Der Text wird um die angegebene Gradzahl gegen den Uhrzeigersinn gedreht. Hinzugekommen ist auch der Parameter fontfile. Da jede beliebige Schrift verwendet werden kann muss doie dazugehörige TTF-Datei verfügbar sein. Für fontfile muss der Dateiname dieser Datei inklusive des Pfades angegeben werden. Liegt die Datei im selben Verzeichnis wie das PHP-Script, dann reicht auch nur der Dateiname. Jetzt haben wir genug Know-How gesammelt um unser Beispiel zu verbessern. Das nächste Codelisting zeigt das verbesserte Beispiel. $breite = 300; //Bildbreite auf 100 Pixel setzen $hoehe = 300; //Bildhöhe auf 100 Pixel setzen $image = imagecreate($breite, $hoehe); //Leeres Bild erstellen $color = imagecolorallocate($image, 255, 255, 255); //Farbe weiß allokieren $textcolor = imagecolorallocate($image, 255, 0, 0); imagefill($image, 0, 0, $color); //Hintergrund einfärben imagettftext($image, 20, 90, 100, 100, $textcolor, "tahoma.ttf", "Ein String"); header("Content-Type: image/jpeg"); //Header manipulieren imagejpeg($image); //Bild ausgeben | Die erstellte Grafik enthält einen String, der senkrecht dargestellt wird. Bei der Schriftart handelt es sich um die Schrift Tahoma, die in der Datei tahoma.ttf vorliegt. Die Schriftgröße beträgt 20 Punkt.
Erstellte Grafiken als Datei speichern Grafiken sollen nicht immer direkt an den Browser gesendet werden. Stellen Sie sich vor, Sie wollten eine kleine Bilddatenbank schreiben in die Bilder eingefügt werden und eine Bildunterschrift automatisch hinzugefügt wird. Man kann das Bild bei jedem Aufruf Laden, den Text hineinschreiben und an den Browser senden. Das ist nicht gerade sehr Zeitsparend für den Server. Besser ist es, das Bild direkt nach dem Upload mit der gewünschten Bildunterschrift in eine Datei zu schreiben, somit hat PHP seine Arbeit erledigt. Sie kennen bereits die Funktionen imagepng, imagejpeg und imagegif, die eine Grafik an den Browser schicken wenn ein gültiges Handle auf eine Grafik übergeben wurde. Genau die gleichen Funktionen können auch in eine Datei schreiben. Wird der optional Parameter filename angeben, dann wird die Ausgabe in die gewünschte Datei umgeleitet. Natürlich funktioniert dies nur, wenn PHP Schreibrechte in dem gewünschten Ordner hat. Wir verändern unser letztes Beispiel so, dass die Ausgabe in die Datei hallowelt.jpg umgelenkt wird: $breite = 300; //Bildbreite auf 100 Pixel setzen $hoehe = 300; //Bildhöhe auf 100 Pixel setzen $image = imagecreate($breite, $hoehe); //Leeres Bild erstellen $color = imagecolorallocate($image, 255, 255, 255); //Farbe weiß allokieren $textcolor = imagecolorallocate($image, 255, 0, 0);
imagefill($image, 0, 0, $color); //Hintergrund einfärben imagettftext($image, 20, 90, 100, 100, $textcolor, "tahoma.ttf", "Ein String");
imagejpeg($image, "hallowelt.jpg"); //Bild ausgeben
echo "Die Datei liegt nun in diesem Verzeichnis und sieht so aus:<br />"; echo "<img src=\"./hallowelt.jpg\" />"; | Wenn Sie das Script aufrufen, dann sollten Sie einen kleinen Text und das erzeugte Bild sehen. Es liegt nun als JPG-Datei vor und kann von jeder beliebiegen Seite verwendet werden. Wenn Sie keine JPG-Datei erhalten möchten, dann können Sie die Funktionen imagegif oder imagepng verwenden, die GIF- bzw. PNG-Dateien erzeugen.
Bereits gespeicherte Bilddateien laden und verändern Für manche Zwecke ist es notwendig eine bereits bestehende Grafik zu laden und zu verändern, denken Sie zum Beispiel an eine Fotodatenbank, die Bildunterschriften in Grafiken einfügt. Das Laden von bestehenden Grafiken lässt sich mit ein paar Funktionen erledigen. Je nach dem, welches Grafikformat geladen werden soll verwenden Sie die Funktion imagecreatefromgif, imagecreatefromjpeg oder imagecreatefrompng. Die Syntax dieser drei Funktionen ist die selbe, als einziger Parameter muss der Dateiname angegeben werden. Als Rückgabewert wird ein gültiges Handle auf das Bild geliefert. Das folgende Beispiel lädt eine Bilddatei hello.jpg und schickt sie an den Browser: $image = imagecreatefromjpeg("hello.jpg"); //Bild aus Datei laden header("Content-Type: image/jpeg"); //Header manipulieren imagejpeg($image); //Bild ausgeben | Grafiken, die mittels der Funktion imagecreatefromgif, imagecreatefromjpeg oder imagecreatefrompng geladen wurden lassen sich beliebig manipulieren, es stehen alle Funktionen der GDLib zur verfügung. Allgemeine Hinweise zur GDLib GDLib ist nicht gleich GDLib, die einzelnen Versionen können sich unterscheiden. So enthalten einige Versionen der GDLib keinen Support für GIF-Bilder, da Compuserve US-weite Rechte an diesem Format besitzt. |