| <?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 | |
| //////////////////////////////////////////////////////// | |
| ?> |