2016-08-16 2 views
0

Ich erstelle ein Diskussionsforum. Dort können Leute Bilder hochladen. Ich muss Bildbreite vom vorübergehenden Speicher überprüfen und wenn Breite mehr als 800 muss zuschneiden. Ich habe diesen folgenden Code gemacht.Größe Bild vor dem Upload aus dem lokalen Speicher in PHP

if (is_array($_FILES)) {  
    if (is_uploaded_file($_FILES['discussionImage']['tmp_name'])) { 
     include('includes/resize-class.php'); 

     $sourcePath = $_FILES['discussionImage']['tmp_name']; 
     $image_info = getimagesize($sourcePath); 
     $targetPath = "photos/".$_FILES['discussionImage']['name']; 
     $image_width = $image_info[0]; 
     if ($image_width > 800) { 
      $resizeObj = new resize($sourcePath); 
      $resizeObj -> resizeImage(278,400, 'portrait'); 
      $resizeObj -> saveImage($targetPath, 60); 
     } 
    } 
} 

aber das funktioniert nicht. Fehler zeigt

Warning: imagesx() erwartet 1 Parameter Ressource zu sein, boolean gegebenen in Resize-Class.php auf der Leitung 16

Warning: imagesy() erwartet Parameter 1 bis bse Ressource, boolean gegebenen in Resize-Class.php auf der Leitung 17

Warning: Division durch Null in Resize-Class.php auf Leitung 106

Warning: imagecreatetruecolor(): Ungültige Bildabmessungen in Resize-Class.php on line 58

Warning: imagecopyresampled() erwartet 1 Parameter Ressource zu sein, gegebenen Booleschen in Resize-clas.php auf Leitung 59

Warning: imagepng() erwartet Parameter 1 Ressource zu sein, boolean in resize- gegebenen Class.php auf Leitung 217

Warnung: imagedestroy() erwartet Parameter 1 Ressource, boolean in Resize-Class.php auf Leitung 228

gegeben werden Dies ist der Code für Resize-Class.php

Class resize 
    { 
    // *** Class variables 
     private $image; 
     private $width; 
     private $height; 
     private $imageResized; 

     function __construct($fileName) 
     { 
      // *** Open up the file 
      $this->image = $this->openImage($fileName); 
      // *** Get width and height 
      $this->width = imagesx($this->image); 
      $this->height = imagesy($this->image); 
     } 

     ## -------------------------------------------------------- 

     private function openImage($file) 
     { 
      // *** Get extension 
      $extension = strtolower(strrchr($file, '.')); 

      switch($extension) 
      { 
       case '.jpg': 
       case '.jpeg': 
        $img = @imagecreatefromjpeg($file); 
        break; 
       case '.gif': 
        $img = @imagecreatefromgif($file); 
        break; 
       case '.png': 
        $img = @imagecreatefrompng($file); 
        break; 
       default: 
        $img = false; 
        break; 
      } 
      return $img; 
     } 

     ## -------------------------------------------------------- 

     public function resizeImage($newWidth, $newHeight, $option="auto") 
     { 
      // *** Get optimal width and height - based on $option 
      $optionArray = $this->getDimensions($newWidth, $newHeight, $option); 

      $optimalWidth = $optionArray['optimalWidth']; 
      $optimalHeight = $optionArray['optimalHeight']; 


      // *** Resample - create image canvas of x, y size 
      $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight); 
      imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height); 


      // *** if option is 'crop', then crop too 
      if ($option == 'crop') { 
       $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight); 
       //echo"1"; 
      } 
     } 

     ## -------------------------------------------------------- 

     private function getDimensions($newWidth, $newHeight, $option) 
     { 

      switch ($option) 
      { 
       case 'exact': 
        $optimalWidth = $newWidth; 
        $optimalHeight= $newHeight; 
        break; 
       case 'portrait': 
        $optimalWidth = $this->getSizeByFixedHeight($newHeight); 
        $optimalHeight= $newHeight; 
        break; 
       case 'landscape': 
        $optimalWidth = $newWidth; 
        $optimalHeight= $this->getSizeByFixedWidth($newWidth); 
        break; 
       case 'auto': 
        $optionArray = $this->getSizeByAuto($newWidth, $newHeight); 
        $optimalWidth = $optionArray['optimalWidth']; 
        $optimalHeight = $optionArray['optimalHeight']; 
        break; 
       case 'crop': 
        $optionArray = $this->getOptimalCrop($newWidth, $newHeight); 
        $optimalWidth = $optionArray['optimalWidth']; 
        $optimalHeight = $optionArray['optimalHeight']; 
        break; 
      } 
      return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight); 
     } 

     ## -------------------------------------------------------- 

     private function getSizeByFixedHeight($newHeight) 
     { 
      $ratio = $this->width/$this->height; 
      $newWidth = $newHeight * $ratio; 
      return $newWidth; 
     } 

     private function getSizeByFixedWidth($newWidth) 
     { 
      $ratio = $this->height/$this->width; 
      $newHeight = $newWidth * $ratio; 
      return $newHeight; 
     } 

     private function getSizeByAuto($newWidth, $newHeight) 
     { 
      if ($this->height < $this->width) 
      // *** Image to be resized is wider (landscape) 
      { 
       $optimalWidth = $newWidth; 
       $optimalHeight= $this->getSizeByFixedWidth($newWidth); 
      } 
      elseif ($this->height > $this->width) 
      // *** Image to be resized is taller (portrait) 
      { 
       $optimalWidth = $this->getSizeByFixedHeight($newHeight); 
       $optimalHeight= $newHeight; 
      } 
      else 
      // *** Image to be resizerd is a square 
      { 
       if ($newHeight < $newWidth) { 
        $optimalWidth = $newWidth; 
        $optimalHeight= $this->getSizeByFixedWidth($newWidth); 
       } else if ($newHeight > $newWidth) { 
        $optimalWidth = $this->getSizeByFixedHeight($newHeight); 
        $optimalHeight= $newHeight; 
       } else { 
        // *** Sqaure being resized to a square 
        $optimalWidth = $newWidth; 
        $optimalHeight= $newHeight; 
       } 
      } 

      return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight); 
     } 

     ## -------------------------------------------------------- 

     private function getOptimalCrop($newWidth, $newHeight) 
     { 

      $heightRatio = $this->height/$newHeight; 
      $widthRatio = $this->width/$newWidth; 

      if ($heightRatio < $widthRatio) { 
       $optimalRatio = $heightRatio; 
      } else { 
       $optimalRatio = $widthRatio; 
      } 

      $optimalHeight = $this->height/$optimalRatio; 
      $optimalWidth = $this->width/$optimalRatio; 

      return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight); 
     } 

     ## -------------------------------------------------------- 

     private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight) 
     { 
      // *** Find center - this will be used for the crop 
      $cropStartX = ($optimalWidth/2) - ($newWidth /2); 
      $cropStartY = ($optimalHeight/ 2) - ($newHeight/2); 

      $crop = $this->imageResized; 
      //imagedestroy($this->imageResized); 

      // *** Now crop from center to exact requested size 
      $this->imageResized = imagecreatetruecolor($newWidth , $newHeight); 
      imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight); 
     } 

     ## -------------------------------------------------------- 

     public function saveImage($savePath, $imageQuality="100") 
     { 
      // *** Get extension 
      $extension = strrchr($savePath, '.'); 
      $extension = strtolower($extension); 
      switch($extension) 
      { 
       case '.jpg': 
       case '.jpeg': 
        if (imagetypes() & IMG_JPG) { 
         imagejpeg($this->imageResized, $savePath, $imageQuality); 
        } 
        break; 

       case '.gif': 
        if (imagetypes() & IMG_GIF) { 
         imagegif($this->imageResized, $savePath); 
        } 
        break; 

       case '.png': 
        // *** Scale quality from 0-100 to 0-9 
        $scaleQuality = round(($imageQuality/100) * 9); 

        // *** Invert quality setting as 0 is best, not 9 
        $invertScaleQuality = 9 - $scaleQuality; 

        if (imagetypes() & IMG_PNG) { 
         imagepng($this->imageResized, $savePath, $invertScaleQuality); 
        } 
        break; 

       // ... etc 

       default: 
        // *** No extension - No save. 
        break; 
      } 

      imagedestroy($this->imageResized); 
     } 


     ## -------------------------------------------------------- 

    } 
+0

Es ist schwer zu erraten, was ohne den Quellcode für includes/resize-class.php vor sich geht. – Gondrup

+0

Hinzugefügt die gleiche Datei mit Frage. Bitte helfen Sie! –

Antwort

0

Nun offenbar auf Ihren Anruf imagecreatefrom kehrt false (entweder das oder die Erweiterung des Bildes in Ihrem Switch-Fall nicht).

Mit @ unterdrücken Sie Fehler, wodurch es unmöglich ist, den Fehler zu verfolgen. Ich würde vorschlagen, es zu entfernen und zu sehen, welchen genauen Fehler es wirft.

+0

Entfernt @ von imagecreatefrom immer noch der Fehler ist gleich. @tomfrio –

+0

Die 'imagecreatefrom..' Methoden geben bei Fehlern' false' zurück. Versuchen Sie herauszufinden, wo Ihr Code versagt, indem Sie die Variable 'sourcePath' ablegen und/oder prüfen, welcher Fall des Switches getroffen wird. – tomfrio

Verwandte Themen