Derzeit online: ca. 70 User  
Spenden via PayPal PHP für dich ist auch als Buch erhältlich - im handlichen Format, zum Nachschlagen, Mitnehmen oder gemütlichen nebenbei Lesen. Mit noch mehr Informationen, zusätzlichen Beispielen und Übungsaufgaben.
Jetzt in der aktualisierten Version bei Amazon oder BoD bestellen!


Schnipsel

PHP - Bild erstellen mit gdlib (Basics)

Für den Anfang wollen wir einfach nur ein Bild mit einem eingefärbtem Hintergrund erstellen und als Datei abspeichern.

Zunächst sollten wir dazu wissen, ob unser Server überhaupt in der Lage ist, mit der gd-lib zu arbeiten. Am besten, ihr testet das auf eurem (virtuellen) Webserver testet, indem ihr eine PHP-Datei erstellt, die lediglich den PHP-Befehl phpinfo() aufruft, diese auf den Server hochladet und dann aufruft. Dort sollte es dann einen Abschnitt gd geben, falls nicht, bleibt nur den Hoster bitten, GD zu aktivieren, oder lokal auf einem virtuellen Webserver zu arbeiten und es gegebenenfalls dort zu installieren.

Wenn wir etwas mit einem Bild machen wollen, müssen wir auf jeden Fall einen Dateizeiger auf das Bild setzen - salopp ausgedrückt muss unser Bild in einer Variable verfügbar sein. Da wir mit einem neuen Bild arbeiten wollen besteht unser erster Schritt also darin, dieses Bild als "Variable" zu erstellen. Dafür dient die Funktion imagecreate bzw. imagecreatetruecolor. Da php.net die Nutzung von imagecreatetruecolor empfiehlt, werden wir mit dieser Arbeiten.
$bild = imagecreatetruecolor(200, 250);
Die Zahlen in Klammer geben die Breite und die Höhe unseres Bildes an, es wird also in diesem Fall 200 Pixel breit und 250 Pixel hoch werden. Die Hintergrundfarbe ist standardmäßig schwarz.

Damit wir uns das jetzt sofort anschauen können, greife ich gleich ein wenig vor und erkläre, wie man das Bild in eine Datei speichert.

Wir machen aus unserem Bild eine jpg-Grafik und speichern sie als test.jpg ab. (Gif wäre bei einem einfarbigen Bild natürlich logischer, aber das funktioniert mit imagecreatetruecolor nicht.) Diejenigen, die nicht auf einem virtuellen Webserver arbeiten, müssen im Verzeichnis, in dem sie arbeiten, Schreibrechte setzen, sonst funktioniert es nicht.
imagejpeg($bild, "test.jpg");
Wir rufen also die Funktion imagejpeg auf und übergeben als Werte unsere Bildvariable und den Dateinamen, den unser Bild bekommen soll.

Damit wir jetzt auch noch was sehen können, binden wir test.jpg als Bild ein - ganz normal über HTML. Unsere Datei sieht dann also so aus:
<?php
$bild = imagecreatetruecolor(200,250);
imagejpeg($bild, "test.jpg");
?>
<img src="test.jpg" />
Wenn wir sie aufrufen sollte ein 200 x 250 Pixel großer schwarzer Fleck auftauchen.

Da schwarze Flecken aber langweilig sind, färben wir jetzt noch die Grafik ein. Leider ist es in PHP etwas umständlich, eine bestimmte Farbe auszuwählen, sie muss nämlich zunächst mit imagecolorallocate bestimmt werden.
$weiss = imagecolorallocate($bild, 255, 255, 255);
Dabei muss zunächst das Bild angegeben werden und danach die gewünschte Farbe in RGB Werten. In unserem Fall dreimal 255, was als Farbe weiß ergibt. Folgendes würde z. B. ein helles Blau ergeben:
$mittelblau = imagecolorallocate($bild, 203, 215, 230);
Wenn wir jetzt also unsere gewünschte Farbe bestimmt haben, müssen wir nur noch das Bild einfärben. Dazu dient die Funktion imagefill.
imagefill($thumb, 0, 0, $mittelblau);
Als erstes wird das Bild angegeben, das eingefärbt werden soll, danach folgen die x- und y-Koordinaten, bei denen die Füllung beginnen soll. 0, 0 ist also die obere linke Ecke. Offen gestanden kann ich aber keinen Unterschied erkennen, wenn man andere Koordinaten wählt - das Bild wird immer vollständig mit der Farbe gefüllt. Der letzte Wert ist die Farbe, die wir vorher ermittelt haben.

Wenn wir jetzt imagejpeg aufrufen (wie oben) und dann das Bild anzeigen lassen, haben wir das selbe Bild wie vorhin, allerdings mit einer anderen Hintergrundfarbe.

Das gesamte Script sieht jetzt so aus:
<?php
$bild = imagecreatetruecolor(200,250);
$weiss = imagecolorallocate($bild, 255, 255, 255);
$mittelblau = imagecolorallocate($bild, 203, 215, 230);
 
imagefill($bild, 0, 0, $mittelblau);
imagejpeg($bild, "test.jpg");
?>
<img src="test.jpg" />
Mit der gd-lib ist noch viel mehr möglich - ein Beispiel ist hier zu sehen.

Autor: Claudia Unkelbach
© 2001 - 2017 Claudia Unkelbach
Gießener Straße 75, 35396 Gießen