18.2 Image_Text 

Besprochene Version: 1.0.2 | Lizenz: PHP-Lizenz 2.02 |
Klassendatei(en): Image/Text.php |
Das Paket Image_Text stellt eine einfache Möglichkeit zur Ausgabe von Texten in Grafiken bereit. Zwar können Sie auch direkt mit PHP Texte ausgeben; wenn Sie aber beispielsweise schon einmal mit dem Problem konfrontiert waren, dass Sie einen Text um seinen Mittelpunkt drehen mussten, dann wissen Sie, welchen Aufwand das bedeuten kann. Angenehm ist, dass die Klasse die Bilddateien komplett selbst erstellen oder alternativ auch auf ein fertiges Bild zurückgreifen kann.
Das Aussehen der Bilddatei, die generiert werden soll, kann recht umfangreich beeinflusst werden. Die einzelnen Werte werden hierbei mit einem Array übergeben, wie Sie in Listing 18.3 sehen können.
require_once 'Image/Text.php'; function check_err($obj) { if (PEAR::isError($obj)) { die ($obj->getMessage()); } } $options = array( 'cx' => 200, 'cy' => 200, 'canvas' => array( 'width' => 400, 'height'=> 400 ), 'width' => 300, 'height' => 300, 'color' => '#ffffff', 'max_lines' => 100, 'min_font_size' => 5, 'max_font_size' => 100, 'font_path' => './', 'antialias' => true, 'font_file' => 'arial.ttf', 'halign' => IMAGE_TEXT_ALIGN_CENTER, 'valign' => IMAGE_TEXT_ALIGN_MIDDLE ); // Neues Objekt erstellen $img_text = new Image_Text("Hallo Welt",$options); check_err($img_text); // Objekt initialisieren $erg=$img_text->init(); check_err($erg); // Ideale Textgroesse ermitteln lassen $erg=$img_text->autoMeasurize(); check_err($erg); // Grafik berechnen $erg=$img_text->render(); check_err($erg); // Daten an Browser senden $erg=$img_text->display(); check_err($erg);
Listing 18.3 Ausgabe eines Textes mit PEAR::Text_Image
Die Ausgabe von Listing 18.3 finden Sie in Abbildung 18.2.
Abbildung 18.2 Ausgabe im Browser
Der Konstruktor dieser Klasse bekommt den Text übergeben, der in der Grafik ausgegeben werden soll. Idealerweise sollten Sie ihm auch schon das Array mit den Optionen übergeben, das das Erscheinungsbild des Textes definiert. Alternativ können die Optionen auch später mithilfe der Methode set() übergeben werden, was auch hilfreich sein kann, wenn Sie bestehende Optionen überschreiben wollen, weil ein Objekt zum Generieren von mehreren Grafiken genutzt werden soll. Möchten Sie nachträglich die genutzten Farben ändern, stehen die Methoden setColor() und setColors() zur Verfügung. Die erstere bekommt nur einen Farbwert übergeben, wohingegen die zweite ein Array mit Farbwerten akzeptiert.
Die Methode init() muss aufgerufen werden, um das Objekt korrekt zu initialisieren. Nachdem das erfolgt ist, kann der Text durch die Methode render() ausgegeben werden. Diese benötigt allerdings die Information, in welcher Schriftgröße der Text dargestellt werden soll. Da diese Information in diesem Beispiel nicht mit dem Options-Array übergeben wurde, wird zuvor die Methode autoMeasurize() aufgerufen. Sie berechnet, welche Schriftgröße maximal genutzt werden kann. Die Methode kann recht ressourcenintensiv sein, weswegen Sie sie mit Bedacht nutzen sollten. Um den Rechenaufwand zu reduzieren, können Sie ihr zwei Zahlen als Parameter übergeben, mit denen Sie festlegen, in welchem Bereich die Schriftgröße liegen soll. Die erste Zahl beschreibt hierbei die kleinste und die zweite Zahl die größte Schrift.
Die Methode bestimmt aber nicht nur die Schriftgröße. Sie passt den Text auch in das Textfeld ein. Sie bestimmt also, wo umbrochen werden muss und Ähnliches. Geben Sie eine Schriftgröße vor, so muss dieser Schritt immer noch erfolgen. Bei gegebener Schriftgröße ist dafür allerdings die Methode measurize() vorgesehen.
Nachdem diese Schritte durchlaufen sind, können Sie das fertige Bild mit der Methode display() zum Browser schicken. Soll das Bild in einer Datei abgelegt werden, können Sie der Methode den booleschen Wert true übergeben, der definiert, dass das Bild als Datei gespeichert werden soll. Der Name und Pfad wird hierbei auch über die Optionen festgelegt. Da es ein wenig missverständlich sein könnte, mit einer Methode namens display() eine Datei zu speichern, können Sie auch die Methode save() nutzen. Sie bekommt den Dateinamen als Parameter übergeben. Andernfalls übernimmt sie den Dateinamen aus den Optionen.
Vielleicht fragen Sie sich, warum ich in Listing 18.3 recht intensiv auf Fehler getestet habe. Da bei der Verarbeitung von Bildern schnell mal ein Fehler auftaucht, kann es nicht schaden, jeden Schritt zu testen. Des Weiteren sollten Sie dabei bitte nicht vergessen, dass eine Fehlermeldung nicht zu sehen ist, wenn Sie die Ausgabe des Scripts mit dem <img>-Tag aus HTML eingebunden haben.
Nachdem Sie nun einen Überblick über die Methoden haben, stellt sich natürlich die Frage, welche Optionen an den Konstruktor übergeben werden können. Die Array-Schlüssel mit den entsprechenden Erläuterungen finden Sie in Tabelle 18.1. Die Ausgabe des Textes erfolgt in ein Textfenster, das sich auf einem Bild befindet, das Canvas (Leinwand) genannt wird.
In Listing 18.4 sehen Sie noch ein Beispiel dafür, wie das Paket genutzt werden kann, um eine bestehende Grafik, in diesem Fall einen Button, zu beschriften. In dem Beispiel wurden die Fehlerabfragen entfernt, um den Code etwas kompakter zu gestalten.
require_once 'Image/Text.php'; // Groesse des Bildes auslesen $img_daten=getimagesize('bt.jpg'); // Mittelpunkt berechnen $cx=$img_daten[0]/2; $cy=$img_daten[1]/2; // Breite und Hoehe des Textfensters $width=$img_daten[0]-20; $height=$img_daten[1]-20; // Bild als Hintergrund einlesen $img_bt=imagecreatefromjpeg('bt.jpg'); $options = array( 'cx' => $cx, 'cy' => $cy, 'canvas' => $img_bt, 'width' => $width, 'height' => $height, 'max_lines' => 1, 'color' => '#dddddd', 'min_font_size' => 1, 'max_font_size' => 30, 'font_path' => './', 'antialias' => true, 'font_file' => 'arial.ttf', 'halign' => IMAGE_TEXT_ALIGN_CENTER, 'valign' => IMAGE_TEXT_ALIGN_MIDDLE ); $img_text = new Image_Text($_GET['text'],$options); $img_text->init(); $img_text->autoMeasurize(); $img_text->render(); $img_text->display();
Listing 18.4 Beschriften eines Buttons mithilfe von PEAR::Image_Text
Um den Button entsprechend nutzen zu können, kann er mit einem Tag wie
eingebunden werden. In Abbildung 18.3 sehen Sie den Button einmal in seiner ursprünglichen Variante und einmal mit Beschriftung.