|  | <?php | 
|  | //requires GD 2.0.1 or higher | 
|  | //note about gif | 
|  | class ThumbnailImage{ | 
|  | private $image; | 
|  | //not applicable to gif or png | 
|  | private $quality = 100; | 
|  | private $mimetype; | 
|  | private $imageproperties; | 
|  | private $initialfilesize; | 
|  | //////////////////////////////////////////////////////// | 
|  | //constructor | 
|  | //////////////////////////////////////////////////////// | 
|  | public function __construct($file, $thumbnailsize = 100){ | 
|  | //check path | 
|  | is_file($file) or die ("File: $file doesn't exist."); | 
|  | $this->initialfilesize = filesize($file); | 
|  | $this->imageproperties = getimagesize($file) or die ("Incorrect file type."); | 
|  | // new function image_type_to_mime_type | 
|  | $this->mimetype = image_type_to_mime_type($this->imageproperties[2]); | 
|  | //create image | 
|  | switch($this->imageproperties[2]){ | 
|  | case IMAGETYPE_JPEG: | 
|  | //                             echo("JPEG<br/>"); | 
|  | $this->image = imagecreatefromJPEG($file); | 
|  | break; | 
|  | case IMAGETYPE_GIF: | 
|  | //                              echo("GIF<br/>"); | 
|  | $this->image = imagecreatefromgif($file); | 
|  | break; | 
|  | case IMAGETYPE_PNG: | 
|  | //                                echo("PNG<br/>"); | 
|  | $this->image = imagecreatefromPNG($file); | 
|  | break; | 
|  | default: | 
|  | die("Couldn't create image."); | 
|  | } | 
|  | $this->createThumb($thumbnailsize); | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | //destructor | 
|  | //////////////////////////////////////////////////////// | 
|  | public function __destruct(){ | 
|  | if(isset($this->image)){ | 
|  | imagedestroy($this->image); | 
|  | } | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | //public methods | 
|  | //////////////////////////////////////////////////////// | 
|  | public function getImage(){ | 
|  | header("Content-type: $this->mimetype"); | 
|  | switch($this->imageproperties[2]){ | 
|  | case IMAGETYPE_JPEG: | 
|  | imagejpeg($this->image,"",$this->quality); | 
|  | break; | 
|  | case IMAGETYPE_GIF: | 
|  | imagegif($this->image); | 
|  | break; | 
|  | case IMAGETYPE_PNG: | 
|  | imagepng($this->image); | 
|  | break; | 
|  | default: | 
|  | die("Couldn't create image."); | 
|  | } | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | public function getMimeType(){ | 
|  |  | 
|  | return $this->mimetype; | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | public function getQuality(){ | 
|  | $quality = null; | 
|  | if($this->imageproperties[2] == IMAGETYPE_JPEG){ | 
|  | $quality = $this->quality; | 
|  | } | 
|  | return $quality; | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | public function setQuality($quality){ | 
|  | if($quality > 100 || $quality  <  1){ | 
|  | $quality = 75; | 
|  | } | 
|  | if($this->imageproperties[2] == IMAGETYPE_JPEG){ | 
|  | $this->quality = $quality; | 
|  | } | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | public function getInitialFileSize(){ | 
|  | return $this->initialfilesize; | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | //private methods | 
|  | //////////////////////////////////////////////////////// | 
|  | private function createThumb($thumbnailsize){ | 
|  | //array elements | 
|  | $srcW = $this->imageproperties[0]; | 
|  | $srcH = $this->imageproperties[1]; | 
|  | //only adjust if larger than reduction size | 
|  | if($srcW >$thumbnailsize || $srcH > $thumbnailsize){ | 
|  | $reduction = $this->calculateReduction($thumbnailsize); | 
|  | //get proportions | 
|  | $desW = $srcW/$reduction; | 
|  | $desH = $srcH/$reduction; | 
|  | $copy = imagecreatetruecolor($desW, $desH); | 
|  | imagecopyresampled($copy,$this->image,0,0,0,0,$desW, $desH, $srcW, $srcH) | 
|  | or die ("Image copy failed."); | 
|  | //destroy original | 
|  | imagedestroy($this->image); | 
|  | $this->image = $copy; | 
|  | } | 
|  |  | 
|  | } | 
|  | //////////////////////////////////////////////////////// | 
|  | private function calculateReduction($thumbnailsize){ | 
|  | //adjust | 
|  | $srcW = $this->imageproperties[0]; | 
|  | $srcH = $this->imageproperties[1]; | 
|  | if($srcW < $srcH){ | 
|  | $reduction = round($srcH/$thumbnailsize); | 
|  | }else{ | 
|  | $reduction = round($srcW/$thumbnailsize); | 
|  | } | 
|  | return $reduction; | 
|  | } | 
|  | }//end class | 
|  | //////////////////////////////////////////////////////// | 
|  | ?> |