Einführung in die gdLibrary (gdLib)

Bildformate

Wir haben ein erstes Bild erstellt und wollen nun ein bestehendes, lokales Bild öffnen und daraus ein neues Bild mit neuem Format generieren.

Aufgabe: Bestehendes Bild öffnen und neu formatieren

Damit wir die Proportionen des Ursprung-Bildes beibehalten können, müssen wir zunächst einmal mit getimagesize() die Größen ermitteln. Damit unser Code übersichtlich bleibt, packen wir Breite und Höhe in eindeutige Variablen: $width_old = $size[0]; und $height_old = $size[1];.
Ausgestattet mit diesen Informationen wissen wir, ob es sich bei dem Bild um ein Hoch- oder Querformat handelt und können beispielsweise neben der festen Breite $width_new beim Querformat die neue Höhe ausrechnen.
Mit imagecreatefromjpeg(); lesen wir schließlich das Originalbild ein. imagecreatetruecolor() erstellt uns ein neues Bild, in welches wir dann unser Originalbild einbetten. Dies geschieht mit dem Befehl imagecopyresampled(). Zuletzt geben wir noch das Bild mit imagejpeg aus.

Tipp: Ich lege jedem die gd Version 2 an's Herz, denn: Erst gd2 ermöglicht es, ein im Format angepasstes Bild mit imagecopyresampled() weich zu zeichnen - ähnlich wie Photoshop dies macht. Die alte gd-Version 1.6 erlaubte nur die Anwendung des Befehles imagecopyresized(), also die Formatanpassung ohne Weichzeichung. Als Ergebnis bekommt man dann aber ein verpixeltes Bild, welches man niemanden zumuten sollte. Tauscht in der Beispieldatei einfach beide Befehle mit den gleichen Optionen aus, um den Unterschied zu sehen.

Der Code:

  1. <?php
  2.  
  3. header('Content-type: image/jpeg');
  4. $file = 'buecher.jpg';
  5.  
  6. if (file_exists($file)) {
  7. // Originalformat auslesen
  8. $size = getimagesize($file);
  9. $width_old = $size[0];
  10. $height_old = $size[1];
  11.  
  12. // Bild laden
  13. $old_picture = imagecreatefromjpeg($file);
  14.  
  15. // Neues Format definieren, dabei Proportionen beibehalten
  16. if ($width_old > $height_old) {
  17. $width_new = 250;
  18. $height_new = intval($height_old * $width_new / $width_old);
  19. } else {
  20. $height_new = 190;
  21. $width_new = intval($width_old * $height_new / $height_old);
  22. }
  23. // Neues Bild erzeugen
  24. $new_picture = imagecreatetruecolor($width_new, $height_new);
  25.  
  26. // Kopiert das Ursprungsbild und formatiert es um + Weichzeichnung.
  27. imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width_new, $height_new, $width_old, $height_old);
  28.  
  29. // Erzeugtes Bild an den Browser ausgeben
  30. imagejpeg($new_picture);
  31. }
  32.  
  33. ?>
  
Die Unterschiede: Linkes Bild mit imagecopyresampled (erst ab gd2) und rechts die Version imagecopyresized bei älterer gd-Version
Die wichtigsten Befehle kurz im Überblick
  • getimagesize
    getimagesize(filename [, imageinfo])
    Ermittelt die Ausmaße einer GIF-, JPEG-, PNG- oder SWF-Grafik-Datei
  • imagecreatefromjpeg
    imagecreatefromjpeg(filename)
    Erzeugt ein neues Bild im JPEG-Format, welches aus einer Datei oder von einer URL gelesen wird
  • imagecreatetruecolor
    imagecreatetruecolor(x, y)
    Erstellt ein neues true color-Bild
  • imagejpeg
    imagejpeg($image [, filename [, quality]])
    Ausgabe des Bildes im Format JPEG im Browser oder als Datei
Downloads

Einführung in die gdLib | Version 2.0 alpha | 2005-10-07