Example

This is the File Processor which is used to generate preview thumbnails and custom Views of image files in yeager. It makes use of the GD image processing library. 
 
  1. <?php
  2.  
  3.     namespace com\yg;
  4.  
  5.     class ExampleProc extends \FileProc {
  6.  
  7.         public function process ($objectid, $params) {
  8.             $view = sFileMgr()->views->get($params["VIEW"]["ID"]);
  9.             $fileinfo = $params["FILEINFO"];
  10.             $filedir = getrealpath(getcwd()."/".sConfig()->getVar('CONFIG/DIRECTORIES/FILESDIR'))."/";
  11.             $filename = $fileinfo['OBJECTID'].'-'.$fileinfo['VIEWVERSION'].$fileinfo['FILENAME'];
  12.             $info = $this->generateThumbnail($filename, $filedir, $view['IDENTIFIER'], $view['WIDTH'], $view['HEIGHT'], $view['CONSTRAINWIDTH'], $view['CONSTRAINHEIGHT'], $view['WIDTHCROP'], $view['HEIGHTCROP']);
  13.             if ($info) {
  14.                 $file = new \File($fileinfo['OBJECTID'], $fileinfo['VERSION']);
  15.                 $file->views->addGenerated($view["ID"], $info["WIDTH"], $info["HEIGHT"], $info["VIEWTYPE"]);
  16.             }
  17.             return true;
  18.         }
  19.  
  20.         public function generateThumbnail ($filename, $filedir, $viewidentifier, $desired_width = 0, $desired_height = 0, $constrain_w, $constrain_h, $widthcrop, $heightcrop) {
  21.  
  22.             $imgsize = getimagesize($filename.$filedir);
  23.  
  24.             switch ($imgsize[2]) {
  25.                 case 1:
  26.                     // gif
  27.                     $source_image = imagecreatefromgif($file);
  28.                     break;
  29.                 case 2:
  30.                     // jpg
  31.                     $source_image = imagecreatefromjpeg($file);
  32.                     break;
  33.                 case 3:
  34.                     // png
  35.                     $source_image = imagecreatefrompng($file);
  36.                     break;
  37.                 default:
  38.                     return 0;
  39.             }
  40.  
  41.             // Calculate source aspect ratio
  42.             $source_width = $imgsize[0];
  43.             $source_height = $imgsize[1];
  44.             $source_aspect = $source_width / $source_height;
  45.  
  46.             if ($desired_width == 0) {
  47.                 $desired_width = $desired_height * $source_aspect;
  48.             }
  49.             if ($desired_height == 0) {
  50.                 $desired_height = $desired_width / $source_aspect;
  51.             }
  52.  
  53.             $target_width = $desired_width;
  54.             $target_height = $desired_height;
  55.  
  56.             if (($constrain_w == 0) && ($constrain_h == 0)) {
  57.                 //...
  58.             } else {
  59.                 //..
  60.             }
  61.  
  62.             // Calculate target aspect ratio (and check for division by zero)
  63.             $target_aspect = $target_width / $target_height;
  64.             if ($target_aspect === false) {
  65.                 $target_aspect = 1;
  66.                 $target_height = $target_width;
  67.             }
  68.  
  69.             $cropfrom_x = 0;
  70.             $cropfrom_y = 0;
  71.             $cropto_x = $source_width;
  72.             $cropto_y = $source_height;
  73.             $intermediate_width = $target_width;
  74.             $intermediate_height = $target_height;
  75.  
  76.             if (($constrain_w == 0) && ($constrain_h == 0)) {
  77.                 // Both horizontal & vertical size are set to "fluid"
  78.                 $cropto_x = $target_width;
  79.                 $cropto_y = $target_height;
  80.             } else {
  81.                 // One dimension (or both) are set to "fixed"
  82.                 if (($constrain_w == 1) && ($constrain_h == 0)) {
  83.                     $cropto_x = $target_width;
  84.                     $cropto_y = $desired_height;
  85.                     if ($cropto_y > $target_height) {
  86.                         $cropto_y = $target_height;
  87.                     }
  88.                     $target_height = $cropto_y;
  89.                 }
  90.                 if (($constrain_w == 0) && ($constrain_h == 1)) {
  91.                     $cropto_x = $desired_width;
  92.                     if ($cropto_x > $target_width) {
  93.                         $cropto_x = $target_width;
  94.                     }
  95.                     $cropto_y = $target_height;
  96.                     $target_width = $cropto_x;
  97.                 }
  98.  
  99.                 if (($constrain_w == 1) && ($constrain_h == 1)) {
  100.                     if ($source_width > $source_height) {
  101.                         // Source is wider than high
  102.                         if ($source_aspect > $target_aspect) {
  103.                             $intermediate_height = $target_height;
  104.                             $intermediate_width = $intermediate_height * $source_aspect;
  105.                         } else {
  106.                             $intermediate_width = $target_width;
  107.                         }
  108.                     } else {
  109.                         // Source is higher than wide
  110.                         if ($source_aspect > $target_aspect) {
  111.                             $intermediate_height = $target_height;
  112.                         } else {
  113.                             $intermediate_width = $target_width;
  114.                             $intermediate_height = $intermediate_width / $source_aspect;
  115.                         }
  116.                     }
  117.                 }
  118.  
  119.                 $cropto_x = $target_width;
  120.                 $cropto_y = $target_height;
  121.                 if ($widthcrop == 0) {          // left
  122.                     $cropfrom_x = 0;
  123.                 } elseif ($widthcrop == 1) {    // center
  124.                     $cropfrom_x = ($intermediate_width / 2) - ($target_width / 2);
  125.                 } elseif ($widthcrop == 2) {    // right
  126.                     $cropfrom_x = ($intermediate_width) - ($target_width);
  127.                 }
  128.                 if ($heightcrop == 0) {         // top
  129.                     $cropfrom_y = 0;
  130.                 } elseif ($heightcrop == 1) {   // middle
  131.                     $cropfrom_y = ($intermediate_height / 2) - ($target_height / 2);
  132.                 } elseif ($heightcrop == 2) {   // bottom
  133.                     $cropfrom_y = ($intermediate_height) - ($target_height);
  134.                 }
  135.             }
  136.  
  137.             $intermediate_image = imagecreatetruecolor($intermediate_width, $intermediate_height);
  138.             imagecopyresampled($intermediate_image, $source_image, 0, 0, 0, 0, $intermediate_width, $intermediate_height, $source_width, $source_height);
  139.             $ff = getrealpath($filedir."tmp-".$prefix.$filename);
  140.             imagejpeg($intermediate_image, $ff, 100);
  141.  
  142.             $final_image = imagecreatetruecolor($target_width, $target_height);
  143.             imagecopyresampled($final_image, $intermediate_image, 0, 0, $cropfrom_x, $cropfrom_y, $target_width, $target_height, $cropto_x, $cropto_y);
  144.             $ff = getrealpath($filedir.$prefix.$filename);
  145.             imagejpeg($final_image, $ff, 100);
  146.             unlink($filedir."tmp-".$prefix.$filename);
  147.  
  148.             $info["WIDTH"] = $target_width;
  149.             $info["HEIGHT"] = $target_height;
  150.             $info["VIEWTYPE"] = FILE_TYPE_WEBIMAGE;
  151.  
  152.             return $info;
  153.         }
  154.  
  155.         public function cropFile ($filename, $x, $y, $width, $height) {
  156.             $imgsize = getimagesize($filename);
  157.             switch ($imgsize[2]) {
  158.                 case 1:
  159.                 // gif
  160.                 $img_in = imagecreatefromgif($filename);
  161.                 break;
  162.                 case 2:
  163.                 // jpg
  164.                 $img_in = imagecreatefromjpeg($filename);
  165.                 break;
  166.                 case 3:
  167.                 // png
  168.                 $img_in = imagecreatefrompng($filename);
  169.                 break;
  170.                 default:
  171.                 return 0;
  172.             }
  173.             $img_out = imagecreatetruecolor($width, $height);
  174.             $result = imagecopyresampled($img_out, $img_in, 0, 0, $x, $y, $width, $height, $width, $height);
  175.             $result = imagejpeg($img_out, $filename, 100);
  176.         }
  177.     }
  178. ?>