daily pastebin goal
86%
SHARE
TWEET

Untitled

a guest Mar 13th, 2018 49 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. //requires GD 2.0.1 or higher
  3. class ThumbnailImage{
  4.     //private data mambers
  5.     var $image;
  6.     var $maxdimension;
  7.     //not applicable to gif or png
  8.     var $quality=100;
  9.     var $fileextension;
  10.     var $mimetype;
  11.     var $imageproperties;
  12.     var $degrees;
  13.     var $path;
  14.     var $types= array("jpg", "jpeg", "gif", "png");
  15. ////////////////////////////////////////////////////////
  16. //constructor
  17. ////////////////////////////////////////////////////////
  18.     function ThumbnailImage($path, $maxdimension){     
  19.         $this->path = $path;
  20.         $this->maxdimension=$maxdimension;
  21.         //check path
  22.         is_file($this->path) or die ("File: $path doesn't exist.");
  23.         //check type   
  24.         $extension=substr($this->path,(strrpos($this->path, ".")+1));
  25.         $extension= strtolower($extension);
  26.         in_array($extension, $this->types) or die ("Incorrect file type.");
  27.         $this->fileextension=$extension;
  28.         $this->setMimeType($extension);
  29.         //get dimensions by creating imageproperties
  30.         $this->imageproperties = GetImageSize($this->path);
  31.         //create image
  32.         if($extension=="jpeg" || $extension=="jpg"){
  33.             $this->image=imagecreatefromJPEG($this->path);
  34.         }elseif($extension=="gif"){
  35.             $this->image=imagecreatefromGIF($this->path);
  36.         }elseif($extension=="png"){
  37.             $this->image=imagecreatefromPNG($this->path);
  38.         }else{
  39.             die("Couldn't create image.");
  40.         }
  41.         $this->createThumb();
  42.     }
  43. ////////////////////////////////////////////////////////
  44. //public methods
  45. ////////////////////////////////////////////////////////
  46.     function getImage(){
  47.         header("Content-type: $this->mimetype");
  48.         if($this->fileextension=="jpeg" || $this->fileextension=="jpg"){
  49.             imagejpeg($this->image,"",$this->quality);         
  50.         }elseif($this->fileextension=="gif"){
  51.             $image=imagegif($this->image);
  52.         }elseif($this->fileextension=="png"){
  53.             $image=imagepng($this->image);
  54.         }else{
  55.             die("Couldn't create image.");
  56.         }
  57.     }  
  58. ////////////////////////////////////////////////////////
  59.     function getMimeType(){
  60.         return $this->mimetype;
  61.     }
  62. ////////////////////////////////////////////////////////
  63.     function getQuality(){
  64.         $quality;
  65.         if($this->fileextension=="jpeg" || $this->fileextension=="jpg"){
  66.             $quality=$this->quality;
  67.         }else{
  68.             $quality=-1;
  69.         }
  70.         return quality;
  71.     }
  72. ////////////////////////////////////////////////////////
  73.     function setQuality($quality){
  74.         if($quality > 100 || $quality < 1)
  75.             $quality=75;
  76.         if($this->mimetype=="image/jpeg"){
  77.             $this->quality=$quality;
  78.         }
  79.     }
  80. ////////////////////////////////////////////////////////
  81.     function destroy(){
  82.         imagedestroy($this->image);
  83.     }
  84. ////////////////////////////////////////////////////////
  85. //private methods
  86. ////////////////////////////////////////////////////////
  87.     function setMimeType($extension){
  88.         if($extension=="jpeg" || $extension=="jpg"){
  89.             $this->mimetype="image/jpeg";
  90.         }elseif($extension=="png"){
  91.             $this->mimetype="image/png";
  92.         }elseif($extension=="gif"){
  93.             $this->mimetype="image/gif";
  94.         }else{
  95.             die ("Not a recognized type.");
  96.         }
  97.     }
  98. ////////////////////////////////////////////////////////
  99.  
  100.     function createThumb(){    
  101.         $this->RotateByDegree();
  102.         $this->getimagesize($this->path);
  103.        
  104.         $srcW=$this->imageproperties[0];
  105.         $srcH=$this->imageproperties[1];
  106.         //only adjust if larger than max
  107.         if($srcW>$this->maxdimension || $srcH>$this->maxdimension){
  108.             $reduction=$this->calculateReduction($srcW,$srcH);
  109.             //get proportions
  110.             $desW=round($srcW/$reduction);
  111.             $desH=round($srcH/$reduction);
  112.             //check for gif
  113.             //create copy from original
  114.             if($this->mimetype=="image/gif"){
  115.                 $copy=imagecreate($desW, $desH);
  116.             }else{     
  117.                 $copy=imagecreatetruecolor($desW, $desH);
  118.             }
  119.             imagecopyresampled($copy,$this->image,0,0,0,0,$desW, $desH, $srcW, $srcH)
  120.                  or die ("Image copy failed.");
  121.             //destroy original
  122.             imagedestroy($this->image);
  123.             $this->image=$copy;        
  124.         }
  125.     }
  126. ////////////////////////////////////////////////////////
  127.     function calculateReduction($srcW, $srcH){
  128.         //adjust
  129.         if($srcW<$srcH){
  130.             $reduction=$srcH/$this->maxdimension;
  131.         }else{             
  132.             $reduction=$srcW/$this->maxdimension;
  133.         }
  134.        
  135.         return $reduction;
  136.     }
  137.    
  138.     function RotateByDegree()
  139.     {
  140.         $exif = exif_read_data($this->path, 0, true);
  141.        
  142.         switch($exif['IFD0']['Orientation']){
  143.             case 1:                                         //nothing
  144.                 $degrees = 0;
  145.                 break;
  146.             case 2:                                         //horizontal flip
  147.                 //$image->flipImage($public,1);
  148.                 $degrees = 0;
  149.                 break;         
  150.             case 3:                                         //180 rotate left
  151.                 $degrees = 180;
  152.                 break;
  153.             case 4:                                         //vertical flip
  154.                 //$image->flipImage($public,2);
  155.                 $degrees = 0;
  156.                 break;
  157.             case 5:                                         //vertical flip + 90 rotate right
  158.                 //$image->flipImage($public, 2);
  159.                 //$image->rotateImage($public, -90);
  160.                 $degrees = 0;
  161.                 break;
  162.             case 6:                                         //90 rotate right
  163.                 $degrees = -90;
  164.                 break;
  165.             case 7:                                         //horizontal flip + 90 rotate right
  166.                 //$image->flipImage($public,1);  
  167.                 //$image->rotateImage($public, -90);
  168.                 $degrees = 0;
  169.                 break;
  170.             case 8:                                         //90 rotate left
  171.                 $degrees = 90;
  172.                 break;
  173.         }
  174.        
  175.         if($degrees <> 0)
  176.         {
  177.             $this->image = imagerotate($this->image, $degrees, 0);
  178.         }
  179.     }
  180. }//end class
  181. ////////////////////////////////////////////////////////
  182. ?>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top