2011-10-14 2 views
0

J'ai une classe de redimensionnement d'image qui fonctionne bien pour ma photo webcam ou photo appareil photo numérique ordinaire. Mais les photos smetime ne redimensionne pas et ne donne que l'avertissement ci-dessous:Erreur de chargement Imagic, qui se produit parfois

[14-Oct-2011 11:31:05] PHP Warning: Module 'imagick' already loaded in Unknown on line 0 
Warning: imagecreatetruecolor() expects parameter 2 to be long, string given in /home/najupal/public_html/home/dll.sys/image_resize.php on line 58 

Warning: imagecopyresampled() expects parameter 1 to be resource, null given in /home/najupal/public_html/home/dll.sys/image_resize.php on line 59 

Warning: imagejpeg() expects parameter 1 to be resource, null given in /home/najupal/public_html/home/dll.sys/image_resize.php on line 199 

Warning: imagedestroy() expects parameter 1 to be resource, null given in /home/najupal/public_html/home/dll.sys/image_resize.php on line 228 

Qu'est-ce que cela signifie?

Encore une fois ma classe est indiqué ci-dessous:

<?php 

///Class is downloaded from Internet 
     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); 
       } 
      } 

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

      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); 
      } 


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

     } 
?> 

S'il vous plaît aidez-moi (Pourquoi certaines images ne redimensionne et donne l'avertissement ci-dessus) ..

Répondre

1

bien 1 des avertissements dit son attend un certain nombre (long), et vous passez une chaîne, donc j'imprimerais/var_dump() les arguments que vous passez pour avoir une meilleure idée.

D'autres avertissements indiquent qu'ils attendent une image ou une ressource et rien (null) n'est présent. Encore une fois, vous pouvez écrire du code pour tester ce qui est passé en premier, ou gérer le cas où il n'y a pas d'image pour commencer.

Questions connexes