#native_company# #native_desc#
#native_cta#

Imagebrowser

By Ed Martin
on September 23, 2003

Version: 1.8

Type: Full Script

Category: Graphics

License: GNU General Public License

Description: Drop this file in any image directory that you want and it automaticaly generates an easy to use browsable interface for your images

<?
////////////////////////////////////////////////////////////////////////////////////////////////////////
// NAME:
//  imagebrowser.php
//
// VERSION:
//  Version 1.0 - 18/07/01
//
//  Version 1.2 - 05/10/01 ([email protected])
//    - Cleaned up HTML code so it works on both Netscape and IE cleanly
//	as it appeared to only work under IE as written. Stylesheets still
//	need work for Netscape but work under IE
//
//  Version 1.3 - 12/15/01 ([email protected])
//    - Added a mechanic for including a caption file or use a default
//      caption comment under pictures. Done through include() function so
//      caption file can also include any HTML or even PHP code.
//
//  Version 1.4 - 01/29/02 ([email protected])
//    - Cleaned up bug with thumbnails not showing properly past the first
//      page as was reported to me.
//    - Added code to link number of page links per row to make easier to
//      read. Controlled by $pgperrow configuration declaration.
//  Version 1.5 - 01/17/03 ([email protected])
//    - Adapted $ind to work with register_globals=off (default since 
//	php-4.2.0), so $ind is now $_GET['ind']
//  Version 1.6 - 04/30/03 ([email protected])
//    - I have added four new variables. You can now deside what the
//      maximum sizes of you large pictures and thumbnails should be.
//    - the images are now resized to maintain ratio. The thumbnails
//      are no longer the same size. But you can see what i the picture
//      actually contains.
//	Version 1.7 - 07/19/03 ([email protected])
//	  - it is now XHTML 1.0 compliant
//	  - i have added a new varible (scale) to decide if you want to scale
//		the pictures that do not excede the max width/height variable
//	  - fixed a bug where images that were wider than tall could exceed
//		the max height varible and images that were taller than wide could
//		exceed the max width variable
//	Version 1.8 09/23/03 ([email protected])
//	  - fixed all the $PHP_SELF varibles to $_SERVER['PHP_SELF'] and 
//      allowed people to specifiy it if PHP_SELF dosen't work($this_page)
//    - fixed a typo in the thumbnail resizing(was $newheight, should be $newthumbh)
//    - added default style style sheet to html output so you don't have to make a
//      style sheet if you use the default(you can still use one if you want to)
//
//
//
//
//
//
//
// AUTHOR:
//  Jo Demol ([email protected])
//
// DESCRIPTION:
//  Drop this file in any directory that you want and it automaticaly generates
//  an easy to use browsable interface for your images
//
// RETURNED VARIABLES:
//  no variables are returned
//
// Configuration Variables
// ======================
//
//    scale      : weather or not to scale the large img to the max height/width if it
//                 does not exceed the max height/width limits
//                 0=don't scale    1=scale
//    maxwidth   : the maximum allowed width of the large picture
//    maxheight  : the maximum allowed height of the large picture
//    thumbmaxw  : the maximum allowed width of the thumbnail
//    thumbmaxh  : the maximum allowed height of the thumbnail
//    imgperpage : the number of thumbnail images displayed
//                 its best to give this a value that is a multiple of imgperrow
//    imgperrow  : the number of thumbnail images per row
//    pgperrow   : the number of page links per row
//    typelist   : array that contains the imagetypes shown by the browser
//    currentdir : default the directory where this php file resides,
//                 can be replaced by any directory of your choice
//    title      : enter the title of your page here
//    home       : enter path to your home directory or any other desired directory
//					(where the home link goes to)
//	  this_page	 : the name of this file, $_SERVER['PHP_SELF'] should work, but if it dosen't
//					just use the file name; this is where all the links to this page go
//    captionext : filename extension placed on caption file with same name
//                	as image. (ie - <image>.<ext>.<captionext>)
//					example: image file sunrise.jpg would use the caption
//					file sunrise.jpg.txt with the default captionext
//    caption    : default caption to place under files if no caption file
//                 exists
//    stylesheet : enter the path to your stylesheet here
//					you may enter just '' to use the default(will embed it in the html)
//					you may also enter 'none' to have no style sheet
//                 the stylesheet should have these classes:
//
//                 .imag { border-style : solid;
//                         border-color: blue;
//                         border-width : 1px;}
//                 .thumb { border-style : solid;
//                          border-color: #999999;
//                          border-width : 2px;}
//                  A:link { color: #999999;
//                           text-decoration : none; }
//                  A:visited { color: #999999;
//                              text-decoration : none; }
//                  A:hover { color:blue; }
//                  any of these classses can be adjusted to your needs
//
//
// USAGE:
// to browse through the images use the back and forward images
// click on one of the thumbnails
// or use one of the pagelinks to go directly to another set of images
// clicking on the large image will give you the full image
/////////////////////////////////////////////////////////////////////////////////////////////////////////


//---Variables---

$scale      = 0;
$maxwidth   = 640;
$maxheight  = 480;
$thumbmaxw  = 50;
$thumbmaxh  = 50;
$imgperpage = 10;
$imgperrow  = 5;
$pgperrow   = 10;
$currentdir = getcwd ();
$typelist   = array("jpg","jpeg","gif","png","JPG");
$imagelist  = array();
$title      = "Pics";
$stylesheet = '' ;
$home       = "{$_SERVER['PHP_SELF']}";
$this_page  = "{$_SERVER['PHP_SELF']}";
$caption    = "";
$captionext = "txt";

//--- ind is put to zero when the script is first called uppon---

if(!isset($_GET['ind'])) 
    $_GET['ind'] = 0;
$index = $_GET['ind'];

//---the following code iterates through the directory and puts any image found in the imagelist array---

$dp=opendir($currentdir);
while ( false != ( $file=readdir($dp) ) ) {
        if (is_file($file) && $file!="." && $file!=".."){

            $extention = explode(".",$file);
            $extfield = count($extention)-1;
            $extention = $extention[$extfield];

            if( in_array($extention,$typelist) ){
                array_push ($imagelist,$file);
            }
        }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">




<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
     

      <title><?= $title ?></title>
      <?
      if ($stylesheet == ''){
      	//--insert the default style sheet into html if none specified
      	echo '<style type="text/css">'
      		.'.imag { border-style : solid;'
      			.'border-color: blue;'
      			.'border-width : 1px;}'
			.'.thumb { border-style : solid;'
				.'border-color: #999999;'
				.'border-width : 2px;}'
			.'A:link { color: #999999;'
				.'text-decoration : none; }'
			.'A:visited { color: #999999;'
				.'text-decoration : none; }'
			.'A:hover { color:blue; }'
			.'</style>';
      } elseif ($stylesheet == 'none') {
      //--no style sheet if that is what you want
      } else {
      	echo "<link rel="STYLESHEET" href="$stylesheet" />";
      }
      ?>
</head>
<body>

<table align="center" border="0">
 <tr>
  <td>
<?       if($index-1 >= 0) {?>
   <a href='<?= $this_page ?>?ind=<?= $index-1 ?>'>[ prev ]</a>
<?       } ?>
  </td>
  <td>
	  <?

//--- This is where the large pictures are resized so that they maintain ratio---

		$sizeee = getimagesize ("$imagelist[$index]");
		$imgwidth = $sizeee[0];
		$imgheight = $sizeee[1];
		
if ($scale == 1 || $imgwidth > $maxwidth || $imgheight > $maxheight) {   // decide if img needs to be scaled	
		$newwidth = $imgwidth/($imgheight/$maxheight);
		$newheight = $imgheight/($imgwidth/$maxwidth);
		if ($imgwidth < $imgheight) {
		
			
			
			
			if ($newwidth > $maxwidth)
			
				{
				
				?>
				<a href="<?= $imagelist[$index] ?>" target="_blank">
					<img src="<?= $imagelist[$index] ?>" width="<?= $maxwidth ?>" height="<?= $newheight ?>" alt="" />
				</a>
				<?
				} else {
				
				?>
				<a href="<?= $imagelist[$index] ?>" target="_blank">
					<img src="<?= $imagelist[$index] ?>" width="<?= $newwidth ?>" height="<?= $maxheight ?>" alt="" />
				</a>
				<?
	 			}
			} else { 
		
			
			if ($newhight > $maxheight)
				
				{
				
				?>
				<a href="<?= $imagelist[$index] ?>" target="_blank">
					<img src="<?= $imagelist[$index] ?>" width="<?= $newwidth ?>" height="<?= $maxheight ?>" alt="" />
				</a>
				<?
				} else {
				
				
				?>
				
				<a href="<?= $imagelist[$index] ?>" target="_blank">
					<img src="<?= $imagelist[$index] ?>" width="<?= $maxwidth ?>" height="<?= $newheight ?>" alt="" />
				</a>
				
				<?
		
	
	   
		}
		}
                } else { ?>
	<a href="<?= $imagelist[$index] ?>" target="_blank">
		<img src="<?= $imagelist[$index] ?>" width="<?= $imgwidth  ?>" height="<?= $imgheight ?>" alt="" />
	</a>
	<?	}
	  ?>
  </td>
  <td>
<?       if($index+1 < count($imagelist) ) {?>
   <a href="<?= $this_page ?>?ind=<?= $index+1 ?>">[ next ]</a>
<?       } ?>
  </td>
 </tr>
 <tr>
  <td>
  </td>
  <td>
   <center><?
         if (file_exists ($imagelist[$index]. "." . $captionext) &&
             is_file ($imagelist[$index]. "." . $captionext) &&
             !is_dir ($imagelist[$index]. "." . $captionext)) 
           include $imagelist[$index]. "." . $captionext;
         else
           echo $caption; ?>
   </center>
  </td>
  <td>
  </td>
 </tr>
</table>

<table align="center">
 <tr><td></td>
<?

//---this code generates the thumbnails based on the configuration settings---

$nrpages = ceil( count($imagelist)/$imgperpage );

for($j=0;$j<$nrpages;$j++)
{
    if( $index >= ($j*$imgperpage) && ($index < (($j+1) * $imgperpage)) ) {
        for($i=($j*$imgperpage);$i<(($j+1) * $imgperpage);$i++) {
            if(($i%$imgperrow == 0) && ($i > 0)) { ?>
 </tr>
 <tr>
<?          } 
            if($i <count($imagelist)  ) {
               $path = "$this_page?ind=".$i; ?>
  <td>

		  <?



//--- This is where the thumbnails are resized so that they maintain ratio---


		$sizeee = getimagesize ("$imagelist[$i]");
		$imgwidth = $sizeee[0];
		$imgheight = $sizeee[1];
		
		$newthumbw = $imgwidth/($imgheight/$thumbmaxh);
		$newthumbh = $imgheight/($imgwidth/$thumbmaxw);
		if ($imgwidth < $imgheight) {
		
			
			
			
			if ($newthumbw > $thumbmaxw)
			
				{
				
				?>
				<a href="<?= $path ?>">
					<img src="<?= $imagelist[$i] ?>" width="<?= $thumbmaxw ?>" height="<?= $newthumbh ?>" alt="" />
				</a>
				<?
				} else {
				
				
				?>
				<a href="<?= $path ?>">
					<img src="<?= $imagelist[$i] ?>" width="<?= $newthumbw ?>" height="<?= $thumbmaxh ?>" alt=""  />
				</a>
				<?
	 			}
			} else { 
		
			
			if ($newthumbh > $thumbmaxh)
				
				{
				
				?>
				<a href="<?= $path ?>">
					<img src="<?= $imagelist[$i] ?>" width="<?= $newthumbw ?>" height="<?= $thumbmaxh ?>" />
				</a>
				<?
				} else {
				
				
				?>
				
				<a href="<?= $path ?>">
					<img src="<?= $imagelist[$i] ?>" width="<?= $thumbmaxw ?>" height="<?= $newthumbh ?>" alt="" />
				</a>
				
				<?
		
	
	   
		}
		}
	  ?>
  </td>
<?          }
        }
    }
}
?>
 </tr>
</table>
<br />
<center>
<?
//---this code generates links based on the configuration settings---
//---only puts $pgperrow page links per row to make cleaner---

for($j=0;$j<$nrpages;$j++) { 
   if(($j%$pgperrow == 0) && ($j > 0)) { ?>
    <br />
<? } ?>
    <a href="<?= $this_page ?>?ind=<?= ($j*$imgperpage) ?>">[page <?= ($j+1) ?>]</a>
<? } ?>
</center>
<center><a href="<?= $home ?>">[ home ]</a></center>
</body>
</html>