Читать книгу Webdesign mit PHP und HTML - Max Bold - Страница 3
ОглавлениеBildbearbeitung mit PHP und der GD-Library
Manipulation
Die GD-Library bietet Funktionen zur Bildbearbeitung und für Grafikoperationen auf dem Server. Der Workshop zeigt an Hand einiger Beispiele, wie Sie das Potenzial dieser Bibliothek nutzen. Von Max Bold
Auf einen Blick
» Der Workshop richtet sich an alle Entwickler, die PHP und die GD-Library zur Bildbearbeitung auf dem Server einsetzen wollen.
» Er stellt die neuesten Funktionen zur Bildmanipulation, die PHP 5 mit integrierter GDLi-brary bietet, an konkreten Beispielen vor.
Das brauchen Sie
» Webspace oder Server mit PHP-5-Unterstützung
Neben vielen anderen Fähigkeiten verfügt PHP auch über durchaus beeindruckende Grafikfähigkeiten. Die Grundlage dafür bietet die GD-Library, die ab PHP 4.3 zum Standardumfang der Skriptsprache gehört. In der Version 5 der Skriptsprache PHP sind noch ein paar Funktionen dazugekommen, mit denen sich jetzt auch Manipulationen an vorhandenen Bitmap-Dateien durchführen lassen.
Bei der GD-Library handelt es sich um eine in C geschriebene Bibliothek, die diverse Funktionen zur Bildbearbeitung und Grafikmanipulation auf dem Server zur Verfügung stellt. So kann man etwa Daten jederzeit aktuell in Diagrammen darstellen, Bilder direkt auf dem Webserver manipulieren oder beispielsweise auch grafische Menüs dynamisch generieren und damit eine Navigation für eine Website generieren.
Die Liste der GD-Funktionen ist lang und im PHPMa-nual ausführlich dokumentiert (de2.php.net/image). An einigen konkreten Beispielen soll nachfolgend der Variantenreichtum der GD-Library insbesondere bei der Bildmanipulation demonstriert werden.Am Anfang ist es sicher ganz sinnvoll, zu ermitteln, mit welcher Version der Bibliothek der genutzte Webspace oder Server ausgestattet ist. Man kann dies zum einen in der php.ini nachlesen oder mit der Funktion gd_info gezielt abfragen. Zum Beispiel mit folgendem Mini-Skript:
<?php
var_dump(gd_info());
?>
Es liefert nicht nur die Versionsnummer der GD-Library zurück, sondern auch, welche Formate und Fonts unterstützt werden.
»Basis-Operationen«
Zu den Basisfunktionen der GD-Library gehören die klassischen Dateioperationen wie Öffnen und Speichern. Für jedes unterstützte Bildformat wird dazu eine passende Funktion bereitgestellt. Um ein existierendes Bild zu öffnen, wird die zum Format passende Funktion verwendet. Für JPEG-Bilder beispielsweise imageCreateFromJpeg. Folgende weitere Funktionen für bekannte Formate stehen zur Verfügung: imageCreateFromGif (GIF-Grafiken), image-CreateFromPNG (PNG-Grafiken) sowie imageCreate-FromBMP (Bitmap- Grafiken).
Der Dateiname der Grafik wird den Funktionen als Parameter übergeben.Alle Funktionen geben ein Handle auf die Grafik zurück, das für alle weiteren Operationen notwendig ist. Nachdem die Bearbeitung abgeschlossen ist, sollten Sie die Grafiken erst einmal speichern. Dabei können Sie die Formate GIF, PNG und JPEG verwenden. imagePNG speichert die Grafik als PNG, imageJPEG als JPEG und imageGIF als GIF. Diesen drei Funktionen müssen Sie zuerst das Grafik-Handle übergeben und wahlweise einen Dateinamen, ansonsten wird die Grafik direkt an den Browser ausgegeben. Bei imageJPEG können Sie als dritten Parameter auch noch die Kompressionsrate als Zahl angeben. Nach dem Speichern geben Sie das Grafik-Handle mit imageDestroy wieder frei. Ein konkretes Beispiel kann so aussehen:
<?php
$bild = imagecreatefromjpeg('test.jpg');
imagepng($bild,'neu.png');
imagedestroy($bild);
?>
<img src="neu.png" border="0">
Damit erzeugen Sie aus dem Bild test.jpgeine neue Datei neu.png und geben diese auf einer HTML-Seite aus. Diese Format-Umwandlung stellt eine einfache Form einer Bildmanipulation dar, die aber die grundsätzliche Vorgehensweise gut illustriert.
Bei den weiteren Beispielen muss man unterscheiden zwischen Funktionen, die auch in älteren GD-Versionen zur Verfügung stehen, und den fortgeschrittenen Varianten, die mit Filtern arbeiten. Diese stehen nur in der PHP 5-Version mit integrierter GD-Library zur Verfügung.
Helligkeitsregelung mit Hilfe von GD-Funktionen.
»Thumbnails erstellen«
Eine Art Standardszenario für den Einsatz von GD ist die Veränderung der Bildgröße. Damit können Sie zum Beispiel aus einem Bilderfundus, den Sie per FTP auf den Server geladen haben, sehr schnell eine Thumbnail-Ga-lerie erzeugen. Realisiert wird dies mit der Funktion imageCopyResized. Mit dem in der vorgestellten Basisfunktion genutzten Bildmaterial sieht die Thumbnail-Generierung so aus:
<?php
$file = 'test.jpg';
$dstfn = 'test_thumb.jpg';
// Bildgröße ermitteln
$groeße = getimagesize($file);
$breite = $groeße[0];
$hoehe = $groeße[1];
// Bild laden
$bild = imagecreatefromjpeg($file);
// Thumbnail erstellen
$neue_breite = 50;
$neue_hoehe = intval($hoehe *
$neue_breite / $breite);
$thumbnail =
imagecreatetruecolor($neue_breite,
$neue_hoehe);
imageCopyResized($thumbnail,$bild,0,
0, 0, 0, $neue_breite, $neue_hoehe,
$breite, $hoehe);
imageJpeg($thumbnail,$dstfn);
?>
<img src="test.jpg" border="0">
<br /><br />
<img src="test_thumb.jpg"
border="0">
Zuerst werden die Dimensionen des Quellbildes ermittelt und dann wird es geladen. Anschließend wird aus der vorgegebenen Breite des Thumbnails dessen proportional richtige Höhe berechnet. Rufen Sie dann die Funktion imageCreateTrueColor auf und übergeben Sie ihr als Parameter die Größe der neuen Grafik in der Reihenfolge Breite und Höhe.
Anschließend können Sie das Bild mit imageCopyResized kopieren, in die gewünschte Größe skalieren und in die Zielgrafik einfügen. In folgender Reihenfolge müssen die Parameter dabei übergeben werden:Handle Zielgrafik, Handle Quellgrafik, Zielpunkt-X, Zielpunkt-Y, Quellpunkt-X, Quell-punkt-Y, Ziel-Breite, Ziel-Höhe, Quell-Breite, Quell-Höhe).Abschließend speichern Sie das Thumbnail und geben Quell- und Thumbnail-Bild im Browser aus. Erweitern können Sie dieses Basis-Skript in vielfältiger Weise. Für eine Bildergalerie interessant ist vor allem die Massenumwandlung vorhandener Quellbilder in Thumbnails. Dazu kann man zum Beispiel die Dateinamen aus einem Verzeichnis, in dem sich die Bilder befinden, in ein Array auslesen (opendir und readdir). In einer Foreach-Schleife wird anschließend für jede ermittelte Bilddatei analog zu dem vorgestellten Beispiel ein Thumbnail generiert.
Eine andere Erweiterung könnte zum Beispiel mit einem Upload-Formular verknüpft werden. User könnten auf diesem Weg eigene Bilder in eine Galerie hochladen, und aus dem Upload würde automatisch ein Thumbnail generiert werden.
»Echte Bildmanipulation«
Mit PHP 5 wurde die GD-Biblio-thek wie erwähnt um echte Funktionen zur Bildmanipulation erweitert. Negative und Graustufenbilder, bisher mit einer aufwendigen Rechnerei verbunden, lassen sich jetzt mit einem einzigen Funktionsaufruf realisieren. Damit jedoch nicht genug: Die neue Funktion imagefilter bietet eine ganze Reihe weiterer Manipulationsvarianten.
Als Parameter müssen die zu manipulierende Ressource, der Filter selbst und bis zu drei weitere Parameter übergeben werden:
Mit IMG_FILTER_BRIGHTNESS können Sie die Helligkeit eines Bildes einstellen. Der dritte Parameter ist eine Zahl zwischen -255 (dunkel) und 255 (hell). Der Wert 0 verändert das Bild nicht.
Der Filter IMG_FILTER_CONTRAST regelt den Kontrast eines Bildes. Der Wert des dritten Parameters kann hier wieder zwischen -255 und 255 variieren.
Der Filter IMG_FILTER_GRAYSCALE wandelt ein Quellbild ohne weitere Parameter in ein Graustufenbild um.
Mit IMG_FILTER_NEGATE können Sie ebenfalls ohne weitere Parameter eine Negativ eines Bildes generieren.
Der Filter IMG_FILTER_COLORIZE erzeugt eine Farbfläche, wobei Sie mit den drei folgenden Parametern die RGB-Werte der Farbe festlegen, mit der das Bild koloriert werden soll.
Ein Reliefbild können Sie mit dem Filter IMG_FILTER_EDGEDETECT ohne weitere Parameter erstellen.
Mit Hilfe des Filters IMG_FILTER_EMBOSS können Sie einem Bild einen 3D-Effekt verleihen.
Weiche Schatten erzeugen Zeichenprogramme mit Hilfe des Gaußschen Weichzeichners. Das GD-Äquivalent ist der Filter IMG_FILTER_GAUS-SIAN_BLUR.
Der Filter IMG_FILTER_SMOOTH glättet ein Bild. Den Grad können Sie mit dem dritten Parameter festlegen.
Der IMG_FILTER_MEAN_REMOVAL versieht Ihr Bild mit Effekten, wie sie typischerweise bei Zeichnungen auftreten.
Die Anwendung dieser Filter ist sehr einfach. Das folgende Beispiel holt unser Testbild und erhöht die Helligkeit um den Wert 100:
<?php
$bild =
imagecreatefromjpeg('test.jpg');
imagefilter($bild,
IMG_FILTER_BRIGHTNESS, 100);
imagejpeg($bild,'heller.jpg');
imagedestroy($bild);
?>
<table border="0">
<tr>
<td><h1>Originalbild</h1></td>
<td><h1>Aufgehelltes Bild</h1></td>
</tr>
<td><img src="test.jpg"
border="0"></td>
<td><img src="heller.jpg"
border="0"></td>
</tr>
</table>
Nach diesem Schema können die anderen Filter, die GD bietet, ebenfalls eingesetzt werden. Allerdings ist eine solche Batch-Bearbeitung auf dem Server nicht gerade typisch für die Manipulation von Bildern. So richtig ihre Stärke ausspielen können diese Filter nur, wenn noch ein Schuss Interaktivität dazukommt.
Die Generierung von Thumbnails ist eine Standardaufgabe der GDLib.
»Grafik interaktiv«
Über ein HTML-Formular können zum Beispiel die Werte für die diversen Parameter interaktiv eingegeben werden. Diese Werte werden an ein PHP-Skript übergeben, das die gewünschten Manipulationen durchführt und das Ergebnis zusammen mit dem Original im Browser wieder ausgibt.
Das wäre im Ergebnis der Grundstock für ein Online-Bildverarbeitungsprogramm auf der Basis von PHP und GD. Das könnte sich zwar nicht mit Desktop-Boliden wie Photoshop oder Photo Impact messen, würde aber einem Webdesigner bei Standardmanipulationen eine Menge Zeit und Arbeit ersparen. Der ständige Up- und Download mit zwischenzeitlicher Bildverarbeitung auf dem PC würde damit entfallen. Einen guten PHP-Ansatz stellt das Projekt unter http://www.cix-blog.de/thm/GDlib-Bildbearbeitung-und-Grafik-Ef-fekte dar. Es handelt sich dabei um einen Klassenbibliothek, die umfangreiche Funktionen für die Online-Bildverarbeitung mit PHP bietet. [mb]