Allgemeines über PHP-Imagefunktionen Mit den PHP-Imagefunktion lassen sich dynamisch Grafiken erzeugen.
Um die Imagefunktionen nutzen zu können wird die GD-Bibliothek von Thomas Boutell (http://www.boutell.com/gd) benötigt. Sie kann als dynamisches Modul in der php.ini eingefügt werden. (Danach nicht vergessen den Server neu zu starten.) Außerdem können mit der Freetype-Bibliothek verschiedene Schriftfonts innerhalb der Grafiken verwendet werden. Es folgen praktische Beispiele, bei denen die Imagefunktionen von PHP eingesetzt werden. Genauere Definitionen der einzelnen Befehle gibt es unter folgendem Link: prinzipielle Arbeitsweise <IMG SRC=“image.php?text=Hallo“> Das sind zwei getrennte Prozesse für den Server!
Im image.php Skript darf kein HTML-Code stehen! Fehlermeldungen werden aber vom PHP in das Bild hineingeschrieben. Man kann dann das Bild aus dem Browser runterladen und im Texteditor öffnen, um die Fehlermeldung zu sehen. Im HTTP-Header wird über den MIME-Typ die Art der Übertragung festgelegt. Das wird entsprechend in PHP für die Bilddatei benutzt: header(„Content-type: image/jpeg“); mögliche MIME-Types:
MIME (Multipurpose Internet Mail Extension) bezeichnet die Art der Übertragung im http-Header Feld content-type. Damit der Browser die Datei richtig interpretieren kann. Form: Haupttyp/Subtyp
Muster header(„Content-type: image/jpeg“); Angabe das es sich bei der http-Übertragung um ein Bild handelt. header(„Content-type: image/jpeg“, "Bild.jpg"); Alternativ wird hier das Bild auf dem Server gespeichert.
$breite = 200; Festlegen von Breite und Höhe des Bildes und Anlegen der Zeichenfläche. $myColor = ImageColorAllocate($img, 255,0,255); Festlegen von Farben. Die Farbkomponenten können wie hier Dezimal (0-255) oder Hexadezimal angegben werden (dann mit Präfix 0x, also 0x00 bis 0xFF).
imagerectangle($img, x1,y1,x2,y2, $myColor); Die Fontangabe kann von 1-5 erfolgen, wobei 5 die größte Drastellung bedeutet. X und y sind die Koordinate, an der der Text erscheinen soll. Jetzt wird das Bild an den Browser geschickt und aus dem internen Speicher wieder gelöscht.
imagejpeg($img); Beispiel 1: Bild generieren <? Zunächst wird mit dem Befehl ImageCreate eine Arbeitsfläche für ein neues Bild mit einer Breite von 20 und einer Höhe von 150cm erstellt. Diese Werte werden der Variable $im zugewiesen, welche für die nachfolgenden Aufrufe als Parameter zu verwenden ist. Der Ursprung des Koordinatensystems befindet sich stets in der linken oberen Ecke. In den folgenden zwei Zeilen werden Hintergrund- und Textfarbe festgelegt. Mit dem Befehl ImageColorAllocate wird eine Farbe definiert, die für Zeichenoperationenbenutzt werden kann. Die Farbe wird im RGB-Format (Rot-, Grün-, Blauanteil jeweils zwischen 0 und 255) angegeben. Der Befehl ImageStringUp erzeugt innerhalb des Bildbereichs einen vertikal von unten nach oben verlaufenden Text in der Schriftgröße 4 mit den Koordinaten x=1 & y=200 und der mit der Variablen $text_color definierten Farbe. Header teilt dem Browser mit, von welchem Typ die Datei ist, die er bekommt. So kann der Browser es richtig verarbeiten. In diesem Fall ist dies eine PNG-Bilddatei. Mit ImagePNG wird das zuvor mit ImageCreate erzeugte Bild ($im) an den Browser geschickt. (An dieser Stelle hätte man z.B. auch ImageJPEG oder ImageGIF verwenden können.)
Exkurs: Mit ImageDestroy wird auf dem Server der Speicher, der durch das Bild belegt wurde wieder freigegeben. Das oben dargestellte Skript kann folgendermaßen in einer HTML-Datei eingesetzt werden:
.... Der Client behandelt das dynamisch erzeugte Bild wie jedes andere vom Server geschickte Bild. Beispiel 2: Einbau einer vorhandenen Grafik <? Mit ImageCreateFromJPEG erstellt man ein neues Bild, das aus einer Datei oder URL im JPEG-Format gelesen wird. Der Inhalt der gelesenen Datei wird in das neue Bild geschrieben. Es gibt ebenfalls die Funktionen ImageCreateFromGIF, ImageCreateFromPNG und ImageCreateFromWBMP für andere Ausgangsformate. ImageString zeichnet auf der Arbeitsfläche $im einen horizontalen Textstring ("Wer kennt diese Person?") in der Größe 5 und der in der Variablen $text_color festgelegten Farbe. Die xy-Koordinaten (10, 10) geben den linken oberen Startpunkt des Strings an. Der Befehl ImageFilledRectangle erstellt ein Rechteck mit den xy-Koordinaten 130/30 (linke obere Ecke) und 175/45 (rechte untere Ecke) in der definierten Farbe. Beispiel 3: Verwendung von Schrift Die GD Bibliothek bietet drei Möglichkeiten zur Verwendung von Schrift in Grafiken an:
<? Mit ImageTTFText lassen sich Grafiken beschriften. Dabei wurden im obigen Beispiel folgende Werte verwendet: Hier: Schriftgröße: 20 Pixel, Rotierungsgrad: 0, Plazierung im xy-Koordinatensystem: 10/20, Textfarbe: Variable $text_color, Schriftart: Times (die Schriftdatei times.ttf wurde vorher auf dem Server gespeichert), Text: "Dynamisch erzeugte Überschrift". Ein Problem bei der dynamischen Erzeugung von Bildbeschriftungen (z.B. Buttons) ist die unterschiedliche benötigte PLatzgröße je nach Textumfang, Schriftart und -größe. Mit der im nächsten Beispiel verwendeten Funktion ImageTTFBBox lässt sich zunächst die Höhe und Breite eines Textes bestimmen um diese anschließend für die ImageCreate Funktion verwenden zu können. Beispiel 4: Button Maker <? Die PHP-Datei bsp4.php wird von der folgenden Seite aufgerufen: <html> In dieser HTML Datei werden in einem Formular der Button-Text und die Option, ob der Button aktiv oder passiv sein soll abgefragt. Durch klicken des Submit-Buttons werden die eingegebenen Werte an die Datei bsp4.php übergegeben. Mit der Funktion ImageTTFBBox wird ein Array von Koordinaten erzeugt, der den exakt benötigten Platz für den Text angibt. Dem errechneten x-Achsen-Wert werden 20 Pixel hinzuaddiert. Anschließend wird mit ImageCreate die Arbeitsfläche erzeugt. Jetzt wird der Text mit der oben angegebenen TrueType-Schriftart in der angegebenen Schriftgröße generiert und anschließend ein Balken darunter gesetzt. Falls im Formular der Wert "Aktiv" gewählt wurde, wird im Anschluß mit der If-Funktion noch ein zweiter, kleinerer Balken erzeugt. Zum Schluß wird das erzeugte Bild an den Client gesendet und anschließend aus dem Speicher gelöscht.
Fazit Diese Beispiele geben lediglich einen ersten Eindruck in die Möglichkeiten der GD Bibliothek. Weitere Möglichkeiten wären beispielsweise Skalierung oder Farbveränderung. Die PHP-Imagingfunktionen stellen einfache, aber wirkungsvolle Funktionen zur Verfügung, Daten - zum Beispiel aus Datenbanken - grafisch darzustellen. Weitere möliche Anwendungsgebiete:
Unter Mitwirkung von Florian Wendlandt (Referat im SoSe2003). |