Advertisement
Guest User

Untitled

a guest
Jan 30th, 2013
577
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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