PHP Bild kopieren und verkleinern

Wie man in PHP Bilder kopiert und und verkleinert



Bilddatei kopieren und verkleinern
Möchten Sie in PHP eine Bilddatei gerne kopieren und gleichzeitig in der größe ändern, dann dürfte Ihnen folgender Quelltext weiterhelfen.


Diese Funktion kopiert eine Jpeg Bilddatei von der Quelle source zum Ziel dest mit einer maximalen Bildbreite bzw. Bildhöhe.

Die Funktion unterstützt in dem Beispiel nur *.jpg-Dateien. Eine Erweiterung auf *.tiff, *.gif, *.png, *.bmp ist aber keine Kunst, Es müssen lediglich >>ImageCreateFromJpeg($source);<< und >>imagejpeg($newPic, $dest);<< gegen die entsprechenden Funktionsaufrufe für eine andere Bilddatei getauscht werden.

Ist das Bild größer als $maxSize, so werden die Bildkoordinaten neu berechnet. Sind die Bildkoordinaten kleiner als die maximale Angabe, so wird nichts unternommen.

/**
* @desc Holt eine Datei aus $source, berechnet die Seitenverhältnisse passend auf $maxSize neu,
*       und kopiert das Ergebnis nach $dest.
* @param string $source : Quellpfad der Grafikdatei
* @param string $dest : Zielpfad der neu zu erstellenden Datei
* @param int $maxSize :  Größe des Rechteckes, in welches die neue Bilddatei passen soll.
* @return void
*/
function resizeImage( $source, $dest, $maxSize )
{
  // Bilddatein ermitteln
  $imgData = getimagesize($source);
  $origWidth = $imgData[0];
  $origHeight = $imgData[1];
 
  if( $imgData[2] == 2 ) // Wenn Datei JPG
  {
    /* Diese Kommentierung entfernen, wenn kleinere Bilder nicht vergrößert werden sollen
    if( $origHeight < $maxSize && origWidth < $maxSize ) // Größenänderung nur, wenn Bild größer als $maxSize ist
    {
      $newWidth = $origWidth;
      $newHeight = $origHeight;
    }
    else
    {
    */
      if( $origHeight >= $origWidth ) // Wenn höher als breit
      {
        $newWidth = round( $origWidth / ($origHeight / $maxSize) );
        $newHeight = $maxSize;
      }
      else // Wenn breiter als hoch
      {
        $newHeight = round( $origHeight / ($origWidth / $maxSize) );
        $newWidth = $maxSize;
      }
    /*
    }
    */
 
    // Größe ändern und unter $dest abspeichern		
    $oldPic = ImageCreateFromJpeg($source);
    $newPic = ImageCreateTrueColor($newWidth,$newHeight);
    ImageCopyResized( $newPic, $oldPic, 0, 0, 0, 0, $newWidth, $newHeight, $origWidth, $origHeight );
    imagejpeg($newPic, $dest);
  }
}
Sollten Sie größere Bilder bearbeiten, so kann es vorkommen, dass das von PHP vorgegebene Speicherlimit erreicht wird. Sie erhalten dann Fehlermeldungen wie: >>Allowed memory size of 8388608 bytes exhausted<<.

Sollte dies zutreffen, so muss PHP mehr Speicherplatz zugewiesen werden. Dieser ist normalerweise bei 16MB oder 32MB festgelegt. Erhöhen Sie den Speicher einfach. Auf wieviel ist natürlich abhängig von der Speichermenge die Ihnen zur Verfügung steht. 64MB, 128MB oder 256MB, sollten jedoch ausreichen.
// Memory Limit auf 128MB vergrößern
ini_set('memory_limit', '128M');
 
/*
 Diesen Code einfach in den Kopfbereich des entsprechenden
 PHP Quelltextes einfügen um PHP mehr Speicher zu gönnen
*/
<?php
  // Beispielaufruf
 
  // Speicher erhöhen
  ini_set('memory_limit', '64M');
 
  // Aufruf Kopiert die Datei vom Ziel zur Quelle mit den maximalen
  // Koordinaten von 600*600Pixel
  resizeImage("./quelle/bilddatei.jpg", "./ziel/bilddatei.jpg", 600);
 
?>