Einführung in gdLibrary
GD Library ist einen Open Source Grafiklibrary zur dynamischen Erzeugung von Grafiken im Format
JPEG, PNG und GIF. Mit ihrer Hilfe kann man Linien und Flächen zeichnen, Text und bestehende Bilder in
Grafiken einbinden. Um mit GDLib zu arbeiten, benötigen Sie mind. PHP 4.2, besser PHP 4.3.3, da in
PHP 4.2 ein Bug vorhanden ist. Natürlich benötigen Sie auch GDLib, die normalerweise seit PHP 4.3
vorkompiliert ist.
Mein erstes Bild
Als erstes geben Sie eine Header an, damit es als Bild, und nicht als Text (HTML) erkannt wird.
header('Content-type: image/png')
. Nun erzeugen wir mit imagecreate(x,y)
ein
neues Bild, und weisen dieses einer Variable (z.B. $image
) zu. Mit
imagecolorallocate($image,R,G,B)
weisen wir nun Farbwerte im RGB-Code der Grafik zu. Eine Fläche
kann nun mit imagefill($image, x, y, farbe);
gefüllt werden. Nun können wir einen
Text mit imagestring($image, font, x, y, text, farbe)
in ihrer Grafik zeichnen.
<?php
header('Content-type: image/png');
$image = @imagecreate(150, 20);
$bg_color = imagecolorallocate($image, 255, 255, 102);
$text_color = imagecolorallocate($image, 0, 51, 102);
imagefill($image, 5, 5, $bg_color);
imagestring($image,2,4,4,'Mein erstes Bild',$text_color);
imagepng($image);
?>
Schriften einbetten
Möchten Sie eigene TrueType-Schriften verwenden, können Sie den Befehl
imagettftext($image, font-size, angle, x, y, color, fontfile, text)
verwenden. Doch zuerst
müssen Sie den erforderlichen Platz mit imagettfbbox(font-size, angle, fontfile, text)
ermitteln. Mit imagecolortransparent($image, $color)
ist es Möglich, eine Farbe als
Transparent zu definieren.
<?php
header('Content-type: image/png');
$text = 'Walt Disney';
$font = 'waltographUI.ttf';
$size = 36;
$angle = 0;
$field = imagettfbbox($size, $angle, $font, $text);
$size_x = (abs($field[4] - $field[0]) + 5);
$size_y = (abs($field[1] - $field[7]) + 5);
$pos_x = 0;
$pos_y = ($size_y - 18);
$image = imagecreate($size_x, $size_y);
$bg_color = imagecolorallocate($image, 255, 255, 127);
$txt_color = imagecolorallocate($image, 0, 0, 127);
imagefill($image, 0, 0, $bg_color);
imagettftext($image, $size, $angle, $pos_x, $pos_y, $txt_color, $font, $text);
#imagecolortransparent($image, $bg_color);
imagepng($image);
imagedestroy($image);
?>
Bild laden
Um ein Bild zu laden, verwenden Sie den Befehl imagecreatefromjpeg(filename)
. Die Große
des Bildes wird mit getimagesize(filename)
ermittelt. Ein neues Bild im True-Color wird mit
imagecreatetruecolor(x, y)
erstellt. Mit imagecopyresized()
können Sie das
Bild in einer neuen Größe ausgeben lassen. Ich benutze lieber den Befehl imagecopyresampled()
,
der das Bild gleich weichzeichnet. Diesen gibt es aber erst seit GD-Lib 2. Zum Schluss wird das Bild mit
imagejpeg()
ausgegeben.
<?php
header('Content-type: image/jpeg');
$file = 'bild1.jpg';
if (file_exists($file)) {
$size = getimagesize($file);
$width = $size[0];
$height = $size[1];
$picture = imagecreatefromjpeg($file);
if ($width>$height) {
$width_new = 150;
$height_new = intval($height * $width_new / $width);
} else {
$height_new = 120;
$width_new = intval($width * $height_new / $height);
}
$image = imagecreatetruecolor($width_new, $height_new);
imagecopyresampled($image, $picture, 0, 0, 0, 0, $width_new, $height_new, $width, $height);
imagejpeg($image);
imagedestroy($image);
}
?>
Orginalbild
Wasserzeichen einbinden
Mit Hilfe von gdLib haben Sie die Möglichkeit, Wasserzeichen in die Bilder einzubinden. Mit
imagecopymerge(image, logo, imgx, imgy, logox, logoy, logow, logoh, transition)
kopieren
Sie das Wasserzeichenlogo in das Bild ein. Soll das Logo z.B. in der Mitte des Bildes erscheinen,
sollten Sie wissen, wie Groß es ist. Dazu benutzen Sie imagesx(image)
und imagesy(image)
<?php
header('Content-type: image/jpeg');
$file = 'bild2.jpg';
$size = getimagesize($file);
$width = $size[0];
$height = $size[1];
$picture = imagecreatefromjpeg($file);
$image = imagecreatetruecolor($width, $height);
imagecopyresampled($image, $picture, 0, 0, 0, 0, $width, $height, $width, $height);
$transition = 50;
$logo = imagecreatefrompng('logo.png');
$logo_width = imagesx($logo);
$logo_height = imagesy($logo);
$logo_x = $width / 2 - ($logo_width / 2);
$logo_y = $height / 2 - ($logo_height / 2);
imagecopymerge($image, $logo, $logo_x, $logo_y, 0, 0, $logo_width, $logo_height, $transition);
imagejpeg($image);
?>
Bildfilter
Seit PHP5 gibt es den Befehl imagefilter
, mit der man Bilder manipulieren kann.
Mit imagefilter($image, IMG_FILTER_BRIGHTNESS, $wert)
wird die Helligkeit geregelt.
Von -255 (dunkel) über 0 (keine Änderung) bis 255 (Hell) sind alle Werte erlaubt.
<?php
$image = imagecreatefromjpeg('bild2.jpg');
imagefilter($image, IMG_FILTER_BRIGHTNESS, 127);
header('content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>
Den Kontrast regln Sie mit imagefilter($image, IMG_FILTER_CONTRAST, 255)
. Auch hier sind
werte zwischen -255 und 255 möglich.
Soll ein Bild in Schwarz/Weiß angezeigt werden, setzten sie den Befehl
imagefilter($image, IMG_FILTER_GRAYSCALE)
ein.
Ein Bild kann auch mit imagefilter($image, IMG_FILTER_NEGATE)
negiert werden.
Die Kanten werden mit imagefilter($image, IMG_FILTER_EDGEDETECT)
hervorgehoben
Um das Bild zu Prägen, setzen sie imagefilter($image, IMG_FILTER_EMBOSS)
ein.
Das Bild Weichzeichnen ist mit imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
möglich.
Leider kann man den Grad nicht einstellen, so das wir den Befehl ggf. mehrmals einsetzen müssen.
Soll das Bild aussehen, als ob es gezeichnet ist, benutzen Sie imagefilter($image, IMG_FILTER_MEAN_REMOVAL)
Und natürlich gibt es auch ein Befehl, um das Bild zu glätten. imagefilter($image, IMG_FILTER_SMOOTH, $wert)
.
Hier sind Werte zwischen 0 und 10 Möglich.