Felix Riesterer: Bilddatei während des Uploads komprimieren

Beitrag lesen

Lieber Gustl,

der user muss eine beliebig grosse bild-datei uploaden können und zum schluss muss die datei mit einer grösse so um 50 kb oder weniger auf dem server liegen ... wie immer das passiert ...

Kompliment, das ist mal eine wirklich unmissverständliche Problembeschreibung! (ernst gemeint!) Da kann man jetzt ansetzen.

Also das Bild wird hochgeladen und dein Script "nimmt es entgegen" und speichert es vorläufig ab. Danach wird das Bild resized, um es auf eine vernünftige Auflösung zu verkleinern. Danach wir es in den endgültigen Bestimmungs-Ordner gespeichert. - Fertig!

Und in PHP...? Ich habe folgendes Script für unsere Schulhomepage programmiert, da auf der Startseite Bilder von Unterseiten angezeigt werden sollen, diese aber mit einer festen maximalen Auflösung (wird als Variablen übergeben). Wie man sehen kann, legt das Script eine neue Bilddatei an, da auf unserer Page das Original nicht verändert werden soll. Ich poste Dir hier meinen Code. Möge er Dir nützen:

  
// Funktion zum Verkleinern eines Bildes, sofern die Maße des Bildes  
// die maximal erlaubten Maße übersteigen.  
  
   function thumbnail_erstellen($bildpfad, $dateiname, $maxx, $maxy)  
      {  
      if($bildpfad == "") return;  
      // Bilddatei ausmessen  
      $bildtyp = exif_imagetype($bildpfad);  
      $bilddimensionen = getimagesize($bildpfad);  
      $originalx = $bilddimensionen[0];  
      $originaly = $bilddimensionen[1];  
  
      switch($bildtyp)  
         {  
         case IMAGETYPE_JPEG:  
         $bild = imagecreatefromjpeg($bildpfad);  
         break;  
  
         case IMAGETYPE_GIF:  
         $bild = imagecreatefromgif($bildpfad);  
         break;  
  
         case IMAGETYPE_PNG:  
         $bild = imagecreatefrompng($bildpfad);  
         break;  
  
         default:  
         $bild = imagecreatetruecolor($maxx, $maxy);  
         }  
  
      // Skalierung vornehmen  
      $ratio = $originalx / $originaly;  
  
      if($bilddimensionen[0] > $maxx)  
         {  
         $bilddimensionen[0] = $maxx;  
         $bilddimensionen[1] = floor($maxx / $ratio);  
         }  
      if($bilddimensionen[1] > $maxy)  
         {  
         $bilddimensionen[1] = $maxy;  
         $bilddimensionen[0] = floor($maxy * $ratio);  
         }  
  
      // Thumbnail erstellen  
      $thumbnail = imagecreatetruecolor($bilddimensionen[0], $bilddimensionen[1]);  
      imagefill($thumbnail, 0, 0, 0xFFFFFF); // white color (#FFFFFF)  
      imagecopyresampled($thumbnail, $bild, 0, 0, 0, 0, $bilddimensionen[0], $bilddimensionen[1], $originalx, $originaly);  
  
      // Thumbnail abspeichern  
      if(strpos($dateiname, " ") > 0) $dateiname = substr($dateiname, 0, strpos($dateiname, " "));  
      $thumbnail_datei = substr($bildpfad, 0, strpos($bildpfad, "../w")+2)."/images/tn_".strtolower($dateiname).".jpg"; // Das wist Du anders lösen.  
      $thumbnail_datei_test = fopen($thumbnail_datei, "wb+");  
      fclose($thumbnail_datei_test);  
      imagejpeg($thumbnail, $thumbnail_datei);  
      imagedestroy($thumbnail);  
      }  

Liebe Grüße aus Ellwangen,

Felix Riesterer.