Einführung in die gdLibrary (gdLib)

Bildupload

200 Bilder einzeln mit dem Bildbearbeitungsprogramm seines Vertrauens bearbeiten, speichern und per FTP hochladen ist mitunter sehr mühsam. Automatisiert kann man das auch mit der gdLib machen: Nach einem Dateiupload lassen wir die Library das Bild formatieren, fügen ein Wasserzeichen ein und geben das ganze als neue Bilddatei aus.
Bis auf den Dateiupload selbst können wir schon alles. Schauen wir uns deshalb nun den Upload selbst an.

Das richtige Formular

Erstellen wir nun das Formular, mit dessen Hilfe der User in der Lage sein soll, ein Bild hochzuladen. Damit wir den Upload später richtig verarbeiten können, muss das Formular mit enctype="multipart/form-data"> gekennzeichnet sein. Nicht minder wichtig ist der Name unseres Dateiauswahlfeldes, hier "meinbild".

  1. <form action="uebung05.php" method="post" enctype="multipart/form-data">
  2. <input type="file" name="meinbild" />
  3. <input type="submit" />
  4. </form>
  5.  

Die Verarbeitung nach dem Upload

Wir überprüfen, ob der User überhaupt ein Bild im Format JPEG hochgeladen hat und ob es Fehler bei der Übermittlung der Daten an den Server gegeben hat. Da der Internet Explorer MIME-Typen anders kennzeichnet, fragen wir nach den Typen image/pjpeg und image/jpeg.
Haben wir diese Hürde erst einmal übersprungen, benennen wir den neuen Dateinamen und das Vereichnis, in dem unser neues Bild abgespeichert werden soll. An dieser Stelle könntet ihr eurer Bild für eine Galerie auch in der Datenbank anmelden und den Dateinamen so dynmaisch generieren.
Nun ermitteln wir wieder Höhe und Breite des Bildes, verarbeiten das Bild wie gewohnt und speichern es dann lokal ab.

  1. <?php
  2. // prüfen, ob der User überhaupt ein Bild im Format jpg übergeben hat
  3. if ((($_FILES['meinbild']['type'] == 'image/pjpeg') || ($_FILES['meinbild']['type'] == 'image/jpeg')) && ($_FILES['meinbild']['error'] == 0) && ($_FILES['meinbild']['tmp_name'] != none) && ($_FILES['meinbild']['name']) && ($_FILES['meinbild']['size'] > 0)) {
  4. $filename_old = $_FILES['meinbild']['name'];
  5. $filename_new = 'mein_neues_bild.jpg';
  6. $savepath = 'pics/';
  7. $size = getimagesize($_FILES['meinbild']['tmp_name']);
  8. $width_old = $size[0];
  9. $height_old = $size[1];
  10.  
  11. // Neues Format definieren, 600 px maximal bei Höhe und Breite
  12. if ($width_old > $height_old) {
  13. $width_new = '600';
  14. $height_new = intval($height_old * $width_new / $width_old);
  15. } else {
  16. $height_new = '600';
  17. $width_new = intval($width_old * $height_new / $height_old);
  18. }
  19.  
  20. // Bild verarbeiten
  21. $picture_old = imagecreatefromjpeg($_FILES['meinbild']['tmp_name']);
  22. $picture_new = imagecreatetruecolor($width_new, $height_new);
  23. imagecopyresampled($picture_new, $picture_old, 0, 0, 0, 0, $width_new, $height_new, $width_old, $height_old);
  24.  
  25. // Neues Bild speichern
  26. $create = imagejpeg($picture_new, $savepath.$filename_new);
  27. imagedestroy($picture_new);
  28.  
  29. if ($create) {
  30. echo '<p>Das Bild wurde hochgeladen und kann <a href="'.$savepath.$filename_new.'">hier</a> angesehen werden.</p>'."\n";
  31. }
  32. } else {
  33. echo '<p>Das Bild konnte nicht verarbeitet werden.</p>'."\n";
  34. }
  35. ?>

Wer möchte, kann den Quelltext noch erweitern, in dem er mehrere Versionen eines Bildes speichert, zum Beispiel ein Thumbnail oder eine Grossbildversion. Wer mag, kann auch wieder ein Wasserzeichen integrieren. Selbstverständlich könnt Ihr auch eine Schleife einbauen, die prüft, ob das Bild ein JPEG oder ein PNG ist und lasst dann die formatspezifischen Befehle durchlaufen.

Downloads

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