Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- //requires GD 2.0.1 or higher
- class ThumbnailImage{
- //private data mambers
- var $image;
- var $maxdimension;
- //not applicable to gif or png
- var $quality=100;
- var $fileextension;
- var $mimetype;
- var $imageproperties;
- var $degrees;
- var $path;
- var $types= array("jpg", "jpeg", "gif", "png");
- ////////////////////////////////////////////////////////
- //constructor
- ////////////////////////////////////////////////////////
- function ThumbnailImage($path, $maxdimension){
- $this->path = $path;
- $this->maxdimension=$maxdimension;
- //check path
- is_file($this->path) or die ("File: $path doesn't exist.");
- //check type
- $extension=substr($this->path,(strrpos($this->path, ".")+1));
- $extension= strtolower($extension);
- in_array($extension, $this->types) or die ("Incorrect file type.");
- $this->fileextension=$extension;
- $this->setMimeType($extension);
- //get dimensions by creating imageproperties
- $this->imageproperties = GetImageSize($this->path);
- //create image
- if($extension=="jpeg" || $extension=="jpg"){
- $this->image=imagecreatefromJPEG($this->path);
- }elseif($extension=="gif"){
- $this->image=imagecreatefromGIF($this->path);
- }elseif($extension=="png"){
- $this->image=imagecreatefromPNG($this->path);
- }else{
- die("Couldn't create image.");
- }
- $this->createThumb();
- }
- ////////////////////////////////////////////////////////
- //public methods
- ////////////////////////////////////////////////////////
- function getImage(){
- header("Content-type: $this->mimetype");
- if($this->fileextension=="jpeg" || $this->fileextension=="jpg"){
- imagejpeg($this->image,"",$this->quality);
- }elseif($this->fileextension=="gif"){
- $image=imagegif($this->image);
- }elseif($this->fileextension=="png"){
- $image=imagepng($this->image);
- }else{
- die("Couldn't create image.");
- }
- }
- ////////////////////////////////////////////////////////
- function getMimeType(){
- return $this->mimetype;
- }
- ////////////////////////////////////////////////////////
- function getQuality(){
- $quality;
- if($this->fileextension=="jpeg" || $this->fileextension=="jpg"){
- $quality=$this->quality;
- }else{
- $quality=-1;
- }
- return quality;
- }
- ////////////////////////////////////////////////////////
- function setQuality($quality){
- if($quality > 100 || $quality < 1)
- $quality=75;
- if($this->mimetype=="image/jpeg"){
- $this->quality=$quality;
- }
- }
- ////////////////////////////////////////////////////////
- function destroy(){
- imagedestroy($this->image);
- }
- ////////////////////////////////////////////////////////
- //private methods
- ////////////////////////////////////////////////////////
- function setMimeType($extension){
- if($extension=="jpeg" || $extension=="jpg"){
- $this->mimetype="image/jpeg";
- }elseif($extension=="png"){
- $this->mimetype="image/png";
- }elseif($extension=="gif"){
- $this->mimetype="image/gif";
- }else{
- die ("Not a recognized type.");
- }
- }
- ////////////////////////////////////////////////////////
- function createThumb(){
- $this->RotateByDegree();
- $this->getimagesize($this->path);
- $srcW=$this->imageproperties[0];
- $srcH=$this->imageproperties[1];
- //only adjust if larger than max
- if($srcW>$this->maxdimension || $srcH>$this->maxdimension){
- $reduction=$this->calculateReduction($srcW,$srcH);
- //get proportions
- $desW=round($srcW/$reduction);
- $desH=round($srcH/$reduction);
- //check for gif
- //create copy from original
- if($this->mimetype=="image/gif"){
- $copy=imagecreate($desW, $desH);
- }else{
- $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;
- }
- }
- ////////////////////////////////////////////////////////
- function calculateReduction($srcW, $srcH){
- //adjust
- if($srcW<$srcH){
- $reduction=$srcH/$this->maxdimension;
- }else{
- $reduction=$srcW/$this->maxdimension;
- }
- return $reduction;
- }
- function RotateByDegree()
- {
- $exif = exif_read_data($this->path, 0, true);
- switch($exif['IFD0']['Orientation']){
- case 1: //nothing
- $degrees = 0;
- break;
- case 2: //horizontal flip
- //$image->flipImage($public,1);
- $degrees = 0;
- break;
- case 3: //180 rotate left
- $degrees = 180;
- break;
- case 4: //vertical flip
- //$image->flipImage($public,2);
- $degrees = 0;
- break;
- case 5: //vertical flip + 90 rotate right
- //$image->flipImage($public, 2);
- //$image->rotateImage($public, -90);
- $degrees = 0;
- break;
- case 6: //90 rotate right
- $degrees = -90;
- break;
- case 7: //horizontal flip + 90 rotate right
- //$image->flipImage($public,1);
- //$image->rotateImage($public, -90);
- $degrees = 0;
- break;
- case 8: //90 rotate left
- $degrees = 90;
- break;
- }
- if($degrees <> 0)
- {
- $this->image = imagerotate($this->image, $degrees, 0);
- }
- }
- }//end class
- ////////////////////////////////////////////////////////
- ?>
Add Comment
Please, Sign In to add comment