| 
<?php
 /**
 * Directory2Gallery - Gallery maker
 * Do you need to create photo gallery from all the images recursivley kept in
 * different folders? Do you like to filter those files? Well, you can do it rite away!
 * just copy this index.php file and paste it in your desired location. Point your browser to it
 * And see the fun!!
 *
 * This file contains some code used only when you drop this file in any folder to access the
 * folder for viewing as gallery. Optionally you may use jQuery tools overlay or something
 * like that to add overlay effect. Owh by the way NO HTACCESS IS REQUIRED!
 *
 *
 * @package     Directory2Gallery
 * @category    Class
 * @license     LGPL
 * @since       Version 1.3
 * @author      Nurul Ferdous <[email protected]>
 * @link        http://dynamicguy.com
 * @todo        Overlay implementation
 * @see         http://flowplayer.org/tools/demos/overlay/index.html
 *
 */
 class Dir2Gallery
 {
 
 private $_limit;
 protected $_randomized;
 protected $_maxWidth, $_maxHeight;
 
 /**
 *
 * @param Array $whiteLists Allowed file extensions
 * @param Integer $limit
 * @param Boolean $randomize whether to randomize the resultset or not
 * @param Integer $maxWidth maximum width of an image
 * @param Integer $maxHeight maximum height of an image
 */
 public function __construct($whiteLists, $limit, $randomize, $maxWidth, $maxHeight)
 {
 $this->_init($limit, $randomize, $maxWidth, $maxHeight);
 $this->makeGallery($whiteLists);
 }
 
 /**
 * Initializing common resources
 *
 * @param Integer $limit
 * @param Boolean $randomize whether to randomize the resultset or not
 * @param Integer $maxWidth maximum width of an image
 * @param Integer $maxHeight maximum height of an image
 *
 */
 private function _init($limit, $randomize, $maxWidth, $maxHeight)
 {
 $this->_limit = $limit;
 $this->_randomized = $randomize;
 $this->_maxWidth = $maxWidth;
 $this->_maxHeight = $maxHeight;
 }
 
 /**
 * Display the Galllery. All the magic happens here!
 *
 * @param Array $whiteLists Allowed file extensions
 * @return Void Alternatively you can return the value like this: {return $html;}
 */
 public function makeGallery($whiteLists)
 {
 $images = $this->_getCleanedFiles($whiteLists);
 if ($images) {
 $html = '<ul>';
 foreach ($images as $image) {
 $html .= '<li style="display:inline;margin: 5px 10px 5px 0">';
 $html .= $this->_scaleImage($image['path'], $this->_maxWidth, 100, $image['name']);
 $html .= '</li>';
 }
 $html .= '<ul>';
 } else {
 $html = "Oops! our bad!! you haven't put any files in your directory. Please feed'em some files dude!!!";
 }
 echo $html;
 }
 
 /**
 * Scale the image proportionately for the thumbnail image
 *
 * @param String $p Image path
 * @param Integer $mw Maxumum width for an image
 * @param Integer $mh Maxumum height for an image
 * @param String $title
 * @return String
 */
 private function _scaleImage($originalImage, $toWidth, $toHeight, $title = '')
 {
 // Get the original geometry and calculate scales
 list($width, $height) = getimagesize($originalImage);
 $xscale = $width / $toWidth;
 $yscale = $height / $toHeight;
 
 // Recalculate new size with default ratio
 if ($yscale > $xscale) {
 $new_width = round($width * (1 / $yscale));
 $new_height = round($height * (1 / $yscale));
 } else {
 $new_width = round($width * (1 / $xscale));
 $new_height = round($height * (1 / $xscale));
 }
 
 $dir = 'cache/' . $toWidth . 'x' . $toHeight;
 $filepath = $dir . strstr($originalImage, '/');
 $ext = strtolower(strstr($filepath, '.'));
 
 // Resize the original image
 $imageResized = imagecreatetruecolor($new_width, $new_height);
 if ($ext == '.jpg') {
 $imageTmp = imagecreatefromjpeg($originalImage);
 } elseif ($ext == '.gif') {
 $imageTmp = imagecreatefromgif($originalImage);
 }
 
 imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
 
 if (!file_exists($dir)) {
 if (!@mkdir($dir, 0777, true)) {
 $error = error_get_last();
 echo 'Error: unable to write in ' . $filepath . '. make sure that ' . getcwd() . ' has write permission';
 exit(0);
 }
 }
 if (!file_exists($filepath)) {
 if ($ext == '.jpg') {
 imagejpeg($imageResized, $dir . strstr($originalImage, '/'));
 } elseif ($ext == '.gif') {
 imagegif($imageResized, $dir . strstr($originalImage, '/'));
 }
 }
 imagedestroy($imageTmp);
 return("<a href='{$originalImage}'><img style='padding:4px;border:1px solid #ddd;' src='{$originalImage}' alt='{$title}' title='{$title}' width='{$new_width}' height='{$new_height}' /></a>");
 }
 
 /**
 * A little house keeping :)
 *
 * @param Array $filter the whitelist of allowed files
 * @return Array
 */
 private function _getCleanedFiles($filter)
 {
 $dirtyArray = $this->_directoryToArray('.', true);
 foreach ($dirtyArray as $data) {
 if (is_file($data)) {
 // get the file extension by taking everything after the last dot
 $extension = end(explode('.', $data));
 
 // if there is no filter set or the filter is set and matches
 if (in_array($extension, $filter)) {
 // add the file details to the file list
 $cleanArray[] = array(
 'path' => $data,
 'name' => end(explode('/', $data)),
 'extension' => $extension,
 'size' => filesize($data),
 'mime' => mime_content_type($data)
 );
 }
 }
 }
 return $cleanArray;
 }
 
 /**
 *
 * @param String $directory the directory path
 * @param Boolean $recursive whether to grab files recursively or not
 * @return Array
 */
 private function _directoryToArray($directory = '.', $recursive = TRUE)
 {
 $array_items = array();
 if ($handle = opendir($directory)) {
 while (false !== ($file = readdir($handle))) {
 if ($file != "." && $file != ".." && $file != 'cache') {
 if (is_dir($directory . "/" . $file)) {
 if ($recursive) {
 $array_items = array_merge($array_items, $this->_directoryToArray($directory . "/" . $file, $recursive));
 }
 $file = $directory . "/" . $file;
 $array_items[] = preg_replace("/\/\//si", "/", $file);
 } else {
 $file = $directory . "/" . $file;
 $array_items[] = preg_replace("/\/\//si", "/", $file);
 }
 }
 }
 closedir($handle);
 }
 
 if ($this->_randomized)
 shuffle($array_items);
 
 if (!$this->_limit)
 $this->_limit = count($array_items);
 
 
 return array_slice($array_items, 0, $this->_limit);
 }
 
 }
 
 // initializing the class
 $gallery = new Dir2Gallery(array('GIF', 'jpg', 'jpeg', 'gif', 'png'), null, true, 100, 100);
 
 
 /* End of file index.php */
 
 
 
 |