info@a-coding-project.de

Grafiken mit PHP generieren

Mit PHP kann man auch Grafiken erstellen und eine Vielzahl von Grafik-Funktionen ausführen. Dazu muss die Standard- PHP-Installation allerdings um die GD-Bibliothek erweitern. Welche Bibliotheken gebraucht werden, hängt nicht zuletzt von den Grafik-Formaten ab, die verarbeitet werden sollen.

Die Bibliothek ist in PHP in der Regel bereits vorinstalliert und muss ggfl. nur aktiviert werden. Unter Windows geht das so:

  • Im Ordner, in dem PHP installiert ist, muss im Unterordner "extensions" die Datei "php_gd2.dll" vorhanden sein
  • Im Windows-Installations-Verzeichnis die Datei php.ini mit Editor öffnen
  • den Eintrag ";extension= php_gd2.dll" suchen
  • das Semikolon am Anfang entfernen, speichern und schliessen

Grafiken erstellen

PHP bearbeitet Bilder (egal, welches Format) intern als Image-Objekte. Diese Image-Objekte können von PHP neu erzeugt werden oder aus einer bereits bestehenden Bild-Datei eingelesen werden. PHP kann ein internes Image-Objekt auch als Bild-Datei speichern.
PHP bietet eine Vielzahl von Grafik-Funktionen.

Funktionen zum Erstellen eines internen Image-Objekts aus einer vorhandenen Bild-Datei beginnen z.B. mit imagecreatefrom. Dahinter wird das Bildformat spezifiziert, z.B.
imagecreatefrompng - PNG
imagecreatefromwbmp - BMP (Windows Bitmap)
us.

Im folgenden Beispiel wird eine Datei "Bild1.jpg" (die im Ordner des PHP-Skripts vorhanden sein muss) eingelesen und angezeigt:

<?php
// Einlesen eines Bildes aus einer Datei in einen Image-Stream:
$image = imagecreatefromjpeg("Bild1.jpg");
// Anzeigen des Image-Streams
imagejpeg($image);
// Zerstören des Image-Objektest
imagedestroy($image);
?>

Mit der Funktion imagecreate wird ein internes Image-Objekt neu erzeugt. Beispiel:

<?php
$image = @ImageCreate (100, 200)
     or die ("Kann kein neues Bild erzeugen");
$Hintergrundfarbe = ImageColorAllocate ($image, 255, 255, 255);
$Textfarbe = ImageColorAllocate ($image, 233, 14, 91);
ImageString ($image, 10, 50, 50, "Text", $Textfarbe);
ImagePNG ($image);
?>

Als Ergebnis wird "Text" als farbige Grafik ausgegeben.

Textausgabe als Grafik
Darstellung: Textausgabe als Grafik

Das Image-Objekt (der Image-Stream) kann als Grafik-Datei abgespeichert werden. Dazu wird der Code oben um eine Zeile ergänzt:

imagejpeg($image, "Bild1.jpg", 100);

Ergebnis: Es wird eine JPEG-Datei erzeugt mit dem Namen "Bild1.jpg" in dem Ordner, in dem das PHP-Skript gespeichert ist. Sie kann mit jedem geeigneten Grafikprogramm bearbeitet werden.

Analog zu JPEG-Dateien können auch andere Formate erstellt werden, z.B.
imagegif - GIF
imagepng - PNG
imagewbmp - BMP (Windows Bitmap)

Schrift

Schriftart, -größe und -farbe lassen sich mit PHP dynamisch beeinflussen. Eine Variante ist, die Schrift als Grafik zu behandeln. PHP stellt dafür einige Funktionen bereit. Im folgenden Beispiel wird die Schriftart Arial aus dem Font arial.ttf geladen und über einem schwarzen Rechteck angezeigt:

<?php
$image = imagecreate (600, 200);
$schwarz = ImageColorAllocate ($image, 0, 0, 0);
$weiss = ImageColorAllocate ($image, 255, 255, 255);
ImageTTFText ($image, 40, 0, 20, 40, $weiss,
 "c:/windows/fonts/arial.ttf",
             "Font: Arial");
ImageJpeg ($image);
ImageDestroy ($image);
?>

Für die Verwendung von Schrift in Grafiken stehen folgende Funktionen zur Verfügung:

FunktionBeschreibung
imagecharzeichnet das erste Zeichen (Charakter) des Strings c in das Bild, auf das per id gezeigt wird. Die linke obere Ecke des Zeichens wird durch x / y bestimmt. Dabei wird von den Koordinaten 0 / 0 als Zeichnungsanfang links-oben ausgegangen. Die Farbe des Zeichens wird mit col bestimmt. Ist font als 1, 2, 3, 4 oder 5 definiert, wird ein eingebauter Font genutzt (je grösser die Nummer, desto grösser der Font
imagecharupZeichnet ein vertikal ausgerichtetes Zeichen. Das erste Zeichen (Charakter) des Strings c wird in das Bild gezeichnet, auf das per id gezeigt wird. Die Koordinaten des Zeichens werden durch x / y bestimmt. Dabei wird von den Koordinaten 0 / 0 als Zeichnungsanfang links-oben ausgegangen. Die Farbe des Zeichens wird mit col bestimmt. Ist font als 1, 2, 3, 4 oder 5 definiert, wird ein eingebauter Font genutzt (je grösser die Nummer, desto grösser der Font
imagefontheightErmittelt die Höhe eines Zeichens (in Pixel) im angegebenen Font.
imagefontwidthGibt die Zeichenbreite des angegebenen Fonts in Pixeln zurück
imageloadfontlädt einen vom Benutzer definierten Bitmap-Font und gibt einen Zeiger auf diesen zurück. Dessen Wert ist immer grösser als 5, um Konflikte mit den eingebauten Fonts zu vermeiden. Das Font-Datei-Format unterliegt binären Abhängigkeiten und ist von Rechner-Typ zu Rechner-Typ unterschiedlich. Das bedeutet, dass Sie die Font-Dateien immer auf dem Rechner-Typ erzeugen müssen, auf dem diese Verwendung finden.
imagepscopyfontErstellt eine Kopie eines bereits geladenen Fonts für weitere Veränderungen
imagepsencodefontÄndert die Vektor-Beschreibung eines Fonts
imagepsextendfontVergrößert oder komprimiert einen Font
imagepsfreefontGibt den durch einen Typ 1 PostScript-Font belegten Speicher wieder frei
imagepsloadfontLädt einen Typ 1 PostScript-Font aus einer Datei
imagepsslantfontSetzt einen Font schräg
imagepstextAusgabe eines Textes auf einem Bild unter Verwendung von Typ 1 PostScript-Fonts
imagestringZeichnet einen horizontalen String: gibt den String s in dem durch den Parameter im bezeichneten Bild an den Koordinaten x und y aus. Die Koordinaten 0, 0 geben die linke obere Ecke des Bildes im an. Der Font erscheint in der Farbe col. Hat font den Wert 1, 2, 3, 4 oder 5 wird ein interner Font benutzt.
imagestringupZeichnet einen vertikalen String.
imagettftextZeichnet den Text text in das per im angegebene Bild, beginnend bei den Koordinaten x und y (oben links ist 0, 0) mit einem Ausgabewinkel von angle in der Farbe col unter Verwendung der TTF-Datei, die mittels fontfile benannt wurde.

Farben und Formen

Das folgende Beispiel erzeugt ein Bild (einen Image-Stream) als farbiges Rechteck und zeigt es an:

<?php
// Erzeuge eine Grafik mit
// Breite = 600
// Höhe = 400
$image = ImageCreate (600, 400) or 
die ("Kann kein neues Bild erzeugen");
// Hintergrundfarbe (RGB = Rot-Anteil, Grün-Anteil, Blau-Anteil)
$Hintergrund = ImageColorAllocate ($image, 50, 0, 100);
ImageJPEG ($image);
?>

Das nächste Beispiel zeichnet eine Ellipse auf den Hintergrund. Dabei ist folgendes zu beachten:
Vor dem Zeichnen der Ellipse muss deren Farbe festgelegt werden.
Die Anweisung zur Ausgabe des Bildes muss hinter der Anweisung zum Zeichnen der Ellipse stehen, sonst wird diese bei der Ausgabe nicht berücksichtigt.

<?php
// Erzeuge eine Grafik mit
// Breite = 600
// Höhe = 400
$image = imagecreatetruecolor (600, 400) or 
         die ("Kann kein neues Bild erzeugen");
// Hintergrundfarbe (RGB = Rot-Anteil, Grün-Anteil, Blau-Anteil)
$Hintergrund = ImageColorAllocate ($image, 0, 0, 0);
// Farbe für die Ellipse bestimmen:
$Farbe = imagecolorallocate($image, 255, 255, 255);
// Ellipse zeichnen
imageellipse($image, 300, 200, 300, 200, $Farbe);
// das Bild ausgeben
ImageJPEG ($image);
?>

Analog dazu kann man andere geometrische Formen zeichnen. Eine gefüllte Ellipse mit imagefilledellipse:

imagefilledellipse($image, 300, 200, 300, 200, $Farbe);

Ein gefülltes Rechteck mit imagefilledrectangle:

imagefilledrectangle($image, 100, 50, 500, 350, $Farbe);

Die Zahlen werden dabei wie folgt angegeben:
Wert1: x-Koordinate der Ecke links oben
Wert2: y-Koordinate der Ecke links oben
Wert3: x-Koordinate der Ecke rechts unten
Wert4: y-Koordinate der Ecke rechts unten

Eine Linie mit imageline:

imageline($image, 100, 50, 500, 350, $Farbe);

Im folgenden Beispiel wird ein dreidimensionales Kreisdiagramm gezeichnet:

<?php
// internes Image erzeugen
$image = imagecreatetruecolor(600, 400);

// Abmessungen des Diagramms definieren
$Durchmesser = 350;
$Mittelpunkt = 300;
$DiagrammOben = 250;
$DiagrammUnten = 150;

// Farben definieren
$weiss = imagecolorallocate($image,0xFF,0xFF,0xFF);
$grau = imagecolorallocate($image,0xC0,0xC0,0xC0);
$dunkelgrau = imagecolorallocate($image,0x90,0x90,0x90);
$blau = imagecolorallocate($image,0x00,0x00,0x80);
$dunkelblau = imagecolorallocate($image,0x00,0x00,0x50);
$rot = imagecolorallocate($image,0xFF,0x00,0x00);
$dunkelrot = imagecolorallocate($image,0x90,0x00, 0x00);

// 3D-Effekt generieren (Mantel)
for ($i = $DiagrammOben; $i > $DiagrammUnten; $i--) 
{
 imagefilledarc($image, $Mittelpunkt, $i, $Durchmesser,50,0,45, 
                $dunkelblau, IMG_ARC_PIE);
 imagefilledarc($image, $Mittelpunkt, $i, $Durchmesser,50,45,75, 
                $dunkelgrau, IMG_ARC_PIE);
 imagefilledarc($image, $Mittelpunkt, $i, $Durchmesser,50,75,360,
                $dunkelrot, IMG_ARC_PIE);
}

// Decke zeichnen
imagefilledarc($image, $Mittelpunkt, $DiagrammUnten, $Durchmesser, 
               50, 0, 45, $blau, IMG_ARC_PIE);
imagefilledarc($image, $Mittelpunkt, $DiagrammUnten, $Durchmesser, 
               50, 45, 75 , $grau, IMG_ARC_PIE);
imagefilledarc($image, $Mittelpunkt, $DiagrammUnten, $Durchmesser, 
               50, 75, 360 , $rot, IMG_ARC_PIE);

// Image anzeigen
imagejpeg($image);

// Imageobjekt zerstören
imagedestroy($image);
?>

Weiterlesen: ⯈ Dateien und Verzeichnisse

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant