HTML, CSS, PHP, MySQL

html-php.de

HTML & CSS Stylesheets Referenz JavaScript PHP MySQL Sonstiges Gästebuch Inhalt Impressum

[ Einführung ] [ Mein erstes Bild ] [ Schriften einbetten ] [ Bild laden ] [ Wasserzeichen ] [ Bildfilter ]

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);
  ?>
  

Beispiel 1

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);
  ?>
  

Beispiel 2

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);
  }
  ?>
  

Beispiel 3   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);
  ?>
  

Beispiel 4

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);
  ?>
  

Beispiel 5

Den Kontrast regln Sie mit imagefilter($image, IMG_FILTER_CONTRAST, 255). Auch hier sind werte zwischen -255 und 255 möglich.

Beispiel 6

Soll ein Bild in Schwarz/Weiß angezeigt werden, setzten sie den Befehl imagefilter($image, IMG_FILTER_GRAYSCALE) ein.

Beispiel 7

Ein Bild kann auch mit imagefilter($image, IMG_FILTER_NEGATE) negiert werden.

Beispiel 8

Die Kanten werden mit imagefilter($image, IMG_FILTER_EDGEDETECT) hervorgehoben

Beispiel 9

Um das Bild zu Prägen, setzen sie imagefilter($image, IMG_FILTER_EMBOSS) ein.

Beispiel 10

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.

Beispiel 11

Soll das Bild aussehen, als ob es gezeichnet ist, benutzen Sie imagefilter($image, IMG_FILTER_MEAN_REMOVAL)

Beispiel 12

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.

Beispiel 13

back top next