Guest User

Untitled

a guest
Mar 13th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  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. ?>
Add Comment
Please, Sign In to add comment