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
- PNGimagecreatefromwbmp
- 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);
?>
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);
?>
Darstellung: Textausgabe als Grafik
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
- GIFimagepng
- PNGimagewbmp
- 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);
?>
Funktion | Beschreibung |
---|---|
imagechar | zeichnet 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 |
imagecharup | Zeichnet 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 |
imagefontheight | Ermittelt die Höhe eines Zeichens (in Pixel) im angegebenen Font. |
imagefontwidth | Gibt die Zeichenbreite des angegebenen Fonts in Pixeln zurück |
imageloadfont | lä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. |
imagepscopyfont | Erstellt eine Kopie eines bereits geladenen Fonts für weitere Veränderungen |
imagepsencodefont | Ändert die Vektor-Beschreibung eines Fonts |
imagepsextendfont | Vergrößert oder komprimiert einen Font |
imagepsfreefont | Gibt den durch einen Typ 1 PostScript-Font belegten Speicher wieder frei |
imagepsloadfont | Lädt einen Typ 1 PostScript-Font aus einer Datei |
imagepsslantfont | Setzt einen Font schräg |
imagepstext | Ausgabe eines Textes auf einem Bild unter Verwendung von Typ 1 PostScript-Fonts |
imagestring | Zeichnet 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. |
imagestringup | Zeichnet einen vertikalen String. |
imagettftext | Zeichnet 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);
?>
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);
?>
imagefilledellipse
:
imagefilledellipse($image, 300, 200, 300, 200, $Farbe);
Ein gefülltes Rechteck mitimagefilledrectangle
:
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);
?>
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ Dateien und Verzeichnisse
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project