Advertisement
Guest User

Untitled

a guest
Jan 30th, 2013
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.22 KB | None | 0 0
  1. <?php
  2.  
  3. class Image {
  4. private $image;
  5. private $filename;
  6. private $width;
  7. private $height;
  8.  
  9. public function __construct($filename_with_path) {
  10. $this->filename = $filename_with_path;
  11. $this->image = $this->loadImage();
  12. }
  13.  
  14. /**
  15. * @param type $save_as_filename Just filename, NOT full path. DO NOT include the file extension, .png will be added automatically. Will be saved to ~/resources/images/profile/[$save_as_filename].png
  16. */
  17. public function saveProfilePicture($save_as_filename) { // Relative filename
  18. $filename_with_path = BASE_PATH . '/resources/images/profiles/' . $save_as_filename;
  19. $this->saveFile($filename_with_path . '.png', 1024, 1024, False); // Save full-size image
  20. $this->saveFile($filename_with_path . '-32.png', 32, 32, True);
  21. $this->saveFile($filename_with_path . '-48.png', 48, 48, True);
  22. $this->saveFile($filename_with_path . '-64.png', 64, 64, True);
  23. $this->saveFile($filename_with_path . '-128.png', 128, 128, True);
  24. $this->saveFile($filename_with_path . '-256.png', 256, 256, True);
  25. }
  26.  
  27. /**
  28. * @param type $save_as_filename Just filename, NOT full path. DO NOT include the file extension, .png will be added automatically. Will be saved to ~/resources/images/lists/[$save_as_filename].png
  29. */
  30. public function saveListLogo($save_as_filename) { // Relative filename
  31. $filename_with_path = BASE_PATH . '/resources/images/lists/' . $save_as_filename;
  32. $this->saveFile($filename_with_path . '.png', 1024, 1024, False); // Save full-size image
  33. $this->saveFile($filename_with_path . '-32.png', 32, 32, False);
  34. $this->saveFile($filename_with_path . '-48.png', 48, 48, False);
  35. $this->saveFile($filename_with_path . '-64.png', 64, 64, False);
  36. $this->saveFile($filename_with_path . '-128.png', 128, 128, False);
  37. $this->saveFile($filename_with_path . '-256.png', 256, 256, False);
  38. }
  39.  
  40. /**
  41. *
  42. * @param type $filename_with_path
  43. * @param type $width Optional.
  44. * @param type $height Optional.
  45. * @param type $crop_to_dimensions Optional. Crops image to the desired dimensions.
  46. */
  47. public function saveFile($filename_with_path, $width, $height, $crop_to_dimensions = False) {
  48. $resizedImage = $this->resizeImage($width, $height, $crop_to_dimensions);
  49. imagePng($resizedImage, $filename_with_path, 9, PNG_ALL_FILTERS);
  50. }
  51.  
  52. public function loadImage() {
  53. $image_info = getImageSize($this->filename); // http://www.php.net/manual/en/function.getimagesize.php
  54. $this->width = $image_info[0];
  55. $this->height = $image_info[1];
  56.  
  57. // Check if there was an error calling getImageSize():
  58. if($image_info === False) {
  59. throw new Exception('Unable to grab image size');
  60. return;
  61. }
  62.  
  63. // Define function names for possibly returned mime types
  64. $image_functions = array(
  65. IMAGETYPE_GIF => 'imageCreateFromGif',
  66. IMAGETYPE_JPEG => 'imageCreateFromJpeg',
  67. IMAGETYPE_PNG => 'imageCreateFromPng',
  68. IMAGETYPE_WBMP => 'imageCreateFromwBmp',
  69. IMAGETYPE_XBM => 'imageCreateFromwXbm',
  70. );
  71.  
  72. // Check if there was an error calling getImageSize():
  73. if(!function_exists($image_functions[$image_info[2]])) {
  74. throw new Exception('Unknown file type');
  75. return;
  76. }
  77.  
  78. $image = $image_functions[$image_info[2]]($this->filename);
  79. imageAlphaBlending($image, False);
  80. imageSaveAlpha($image, True);
  81.  
  82. return $image;
  83. }
  84.  
  85. public function getFileExtension() {
  86. $file_extension = pathinfo($this->filename, PATHINFO_EXTENSION);
  87. return strtolower($file_extension);
  88. }
  89.  
  90. function resizeImage($target_width, $target_height, $crop_to_dimensions = False) {
  91. //print 'Original: ' . $this->width . 'x' . $this->height . '<br />';
  92.  
  93. if($crop_to_dimensions === True) {
  94. $width_ratio = $target_width / $this->width;
  95. //print 'Width Ratio: ' . $width_ratio . '<br />';
  96. $height_ratio = $target_height / $this->height;
  97. //print 'Height Ratio: ' . $height_ratio . '<br />';
  98. if($width_ratio > $height_ratio) {
  99. //print 'Width Wins<br />';
  100. $resized_width = $target_width;
  101. $resized_height = $this->height * $width_ratio;
  102. } else {
  103. //print 'Height Wins<br />';
  104. $resized_height = $target_height;
  105. $resized_width = $this->width * $height_ratio;
  106. }
  107. } else {
  108. $width_ratio = $target_width / $this->width;
  109. //print 'Width Ratio: ' . $width_ratio . '<br />';
  110. $resized_width = $target_width;
  111. $resized_height = $this->height * $width_ratio;
  112. //print 'Resized: ' . $resized_width . 'x' . $resized_height . '<br />';
  113. if($resized_height > $target_height) {
  114. $height_ratio = $target_height / $resized_height;
  115. $resized_height = $target_height;
  116. //print 'Height Ratio: ' . $height_ratio . '<br />';
  117. $resized_width = $resized_width * $height_ratio;
  118. //print 'Resized: ' . $resized_width . 'x' . $resized_height . '<br />';
  119. }
  120. }
  121.  
  122. // Drop decimal values
  123. $resized_width = round($resized_width);
  124. $resized_height = round($resized_height);
  125.  
  126. // Calculations for centering the image
  127. $offset_width = round(($target_width - $resized_width) / 2);
  128. $offset_height = round(($target_height - $resized_height) / 2);
  129.  
  130. //print 'Width Offset: ' . $offset_width . '<br />';
  131. //print 'Height Offset: ' . $offset_height . '<br />';
  132.  
  133. $new_image = imageCreateTrueColor($target_width, $target_height);
  134. imageAlphaBlending($new_image, False);
  135. imageSaveAlpha($new_image, True);
  136. $transparent = imageColorAllocateAlpha($new_image, 0, 0, 0, 127);
  137. imagefill($new_image, 0, 0, $transparent);
  138.  
  139. imageCopyResampled($new_image, $this->image, $offset_width, $offset_height, 0, 0, $resized_width, $resized_height, $this->width, $this->height);
  140.  
  141. //print 'Final: ' . $resized_width . 'x' . $resized_height . '<br /><br /><br />';
  142. return $new_image;
  143. }
  144.  
  145. function resizeToHeight($original_width, $original_height, $desired_height) {
  146. //print 'resize height: ' . $desired_height . '<br />';
  147. $ratio = $desired_height / $original_height;
  148. //print '- ratio: ' . $ratio . '<br />';
  149. $width = $original_width * $ratio;
  150. //print '- new width: ' . $width . '<br />';
  151. //print '- new height: ' . $desired_height . '<br />';
  152. return array(
  153. 'width' => $width,
  154. 'height' => $desired_height
  155. );
  156. }
  157.  
  158. function resizeToWidth($original_width, $original_height, $desired_width) {
  159. $ratio = $desired_width / $original_width;
  160. $height = $original_height * $ratio;
  161. return array(
  162. 'width' => $desired_width,
  163. 'height' => $height
  164. );
  165. }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement