...

View Full Version : generating a html page for each image in a gallery



Shimmer82
06-19-2005, 09:43 PM
Hi, I'm editing a PHP gallery script. Right now it is set up so that when an thumbnail is clicked, it opens the fullsize image in a new window. I was wondering how I can have it put each fullsize image in an HTML page when it opens (that way I can edit the pages to match my website) rather than it just opening the image.

Here is what I have set up so far:
http://www.babyseashimmer.com/gallery/gallerytest2.php

And here is my code:


<html>
<head>
<title> My Collection</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body bgcolor="99CCCC" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<p><?php // charset=ISO-8859-1
/*
* galerie.php - a simple gallery script
* Copyright (C) 2002, 2003 Daniel Wacker <mail@wacker-welt.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* --
* This script provides a simple gallery of all images that are located
* in the script's directory and subdirectories.
*
* Requirements
* - PHP >= 4.1.0
* - GD Library ( >= 2.0.1 for good thumbnails)
* - JPEG software
* - PHP >= 4.3.0 or GD < 1.6 for GIF support
* - libpng for PNG support
*
* Installation
* Simply put this script in a folder of your web server and call it in a
* web browser. Be sure that the script has permission to read the image
* files and to create and write into the thumbnail folder.
*
* Attention:
* This script tries to generate jpeg thumbnail files in a subfolder of the
* gallery folder(s). The filenames look like "originalfilename.thumb.jpg".
*
/* ------------------------------------------------------------------------- */

/* Select your language:
* 'en' - English
* 'de' - German
*/
$lang = 'en';

/* Select your charset
*/
$charset = 'ISO-8859-1';

/* How many images per page?
*/
$maxpics = 20;

/* Create thumbnails in this subfolder
*/
$thumbdir = 'thumbs';

/* Size of created thumbnails
*/
$thumbsize = 150;

/* Wether to show file names (true or false)
*/
$filenames = false;

/* Wether to show subdirectores (true or false)
*/
$subdirs = false;

/* Wether to show a title (true or false)
*/
$title = false;

/* Set the gallery root relative to the script's directory.
*
* If you include() this script, set the path relative to
* the directory of the script, that does the include().
*/
$picdir = '.';

/* Set this to true if you include() this script.
*/
$included = false;

/* Set this to true, if you include() this script and want the images
* to be shown inline.
*/
$inline = true;

/* Set the thumbnail background color, if you include() this script.
*/
$bg = '99CCCC';

/* ------------------------------------------------------------------------- */
switch ($lang) {
case 'de':
$words = array(
'gallery' => 'Galerie',
'src' => 'Quelltext',
'error' => 'Fehler',
'php_error' => 'PHP Version 4.1 oder höher ist erforderlich.',
'gd_error' => 'Die GD-Bibliothek wird benötigt. Siehe http://www.boutell.com/gd/.',
'jpg_error' => 'Die JPEG-Bibliothek wird benötigt. Siehe ftp://ftp.uu.net/graphics/jpeg/.',
'mkdir_error' => 'Schreibrecht im Verzeichnis ist erforderlich.',
'opendir_error' => 'Das Verzeichnis "%1" kann nicht gelesen werden.'
);
break;
case 'en':
default:
$words = array(
'gallery' => 'gallery',
'src' => 'source code',
'error' => 'Error',
'php_error' => 'PHP >= 4.1 is required.',
'gd_error' => 'GD Library is required. See http://www.boutell.com/gd/.',
'jpg_error' => 'JPEG software is required. See ftp://ftp.uu.net/graphics/jpeg/.',
'mkdir_error' => 'Write permission is required in this folder.',
'opendir_error' => 'The directory "%1" can not be read.'
);
}
isset($_SERVER) || $error = error('php', array());
function_exists('imagecreate') || $error = error('gd', array());
function_exists('imagejpeg') || $error = error('jpg', array());
@ini_set('memory_limit', -1);
$jpg = '\.jpg$|\.jpeg$'; $gif = '\.gif$'; $png = '\.png$';
$fontsize = 2;
if (array_key_exists('src', $_REQUEST)) {
ob_start();
highlight_file(basename($_SERVER['PHP_SELF']));
$src = ereg_replace('<font color="([^"]*)">', '<span style="color: \1">', ob_get_contents());
$src = ereg_replace('</font>', '</span>', $src);
ob_end_clean();
}
function w ($w) {
global $words;
return h($words[$w]);
}
function h ($w) {
global $charset;
return htmlentities($w, ENT_COMPAT, $charset);
}
function error ($w, $a) {
return str_replace(array('%1'), $a, w($w .'_error'));
}
if (!$included) {
echo('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
body { font-family: sans-serif; background-color: 99CCCC; }
hr { border-style: none; height: 1px; background-color: 99CCCC; color: 99CCCC }
p { margin: 0px; padding: 0px }
#pagenumbers { text-align: center; margin: 0px 1em 0px 1em }
img { margin: 10px; border: none }
a { text-decoration: none }
#src');
if ($filenames) echo(', div a p'); echo(" { font-size: small }\n");
if ($filenames) {
echo(".clear { clear: left }\n");
echo("a:hover p { text-decoration: underline }\n");
echo('div { width: ' . ($thumbsize + 20) . 'px; text-align: center; ');
echo("float: left; margin: 1em }\n");
}
echo("</style>\n");
echo("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$charset\" />\n");
if (isset($src)) {
echo('<title>' . w('Gallery') . ': ' . w('src') . "</title>\n");
echo("</head>\n<body>\n");
echo('<h1>' . w('gallery') . ': ' . w('src') . "</h1>\n<hr />\n<pre>");
echo("$src</pre>\n</body>\n</html>");
exit;
}
}
if (array_key_exists('dir', $_REQUEST) && $subdirs) $dir = $_REQUEST['dir'];
else $dir = '';
if (!empty($_SERVER['PATH_TRANSLATED'])) $d = dirname($_SERVER['PATH_TRANSLATED']);
elseif (!empty($_SERVER['SCRIPT_FILENAME'])) $d = dirname($_SERVER['SCRIPT_FILENAME']);
else $d = getcwd();
$delim = (substr($d, 1, 1) == ':') ? '\\' : '/';
$rp = function_exists('realpath');
if ($rp) $root = realpath($d . $delim . $picdir);
else $root = $d . $delim . $picdir;
if ($rp) $realdir = realpath($root . $dir);
else $realdir = $root . $dir;
if (substr($realdir, 0, strlen($root)) != $root) $realdir = $root;
$dirname = substr($realdir, strlen($root));
$dirnamehttp = $picdir . $dir;
if ($delim == '\\') $dirnamehttp = strtr($dirnamehttp, '\\', '/');
if (substr($dirnamehttp, 0, 2) == './') $dirnamehttp = substr($dirnamehttp, 2);
if (empty($dirnamehttp)) $dirnamehttp = '.';
if ($subdirs) {
if (empty($dirname)) $ti = ''; else $ti = ": $dirname";
} else $ti = '';
if (!$included) {
if (isset($error)) echo("<title>$error</title>");
else echo('<title>' . w('gallery') . h($ti) . "</title>\n");
echo("</head>\n<body>\n");
}
if (!($d = @opendir($realdir))) $error = error('opendir', array($realdir));
if (isset($error)) echo("<p style=\"color: red\">$error</p>\n");
else {
if ($title) echo('<h1>' . w('gallery') . h($ti) . "</h1>\n<hr />\n");
$dirs = $pics = array();
$query = $jpg;
if (function_exists('imagecreatefromgif')) $query .= "|$gif";
if (function_exists('imagecreatefrompng')) $query .= "|$png";
while (false !== ($filename = readdir($d))) {
if ($filename == $thumbdir
|| ($filename == '..' && $dirname == '')
|| ($filename != '..' && substr($filename, 0, 1) == '.')) continue;
$file = $realdir . $delim . $filename;
if (is_dir($file)) $dirs[] = $filename;
elseif (eregi($query, $file)) $pics[] = $filename;
}
closedir($d);
sort($dirs);
sort($pics);
$urlsuffix = '';
foreach ($_GET as $v => $r) {
if (!in_array($v, array('dir', 'pic', 'offset'))) $urlsuffix .= "&$v=" . urlencode($r);
}
if ($included && $inline && array_key_exists('pic', $_REQUEST)) {
$pic = $_REQUEST['pic'];
echo("<div id=\"picture\">\n");
echo('<img src="' . h("$dirnamehttp/{$pics[$pic]}") . '" alt="' . h(basename($pics[$pic])) . '"');
list($width, $height, $type, $attr) = @getimagesize($pic);
if (!empty($width)) echo(" style=\"width: {$width}px; height: {$height}px\"");
echo(" />\n");
$url = ($dirname == '') ? '?' : '?dir=' . urlencode($dirname) . '&';
echo("<hr />\n");
if ($pic > 0)
echo('<a href="' . h($url) . 'pic=' . ($pic - 1) . h($urlsuffix) . '">[&lt;]</a> ');
if ($pic >= $maxpics)
$u = "{$url}offset=" . (floor($pic / $maxpics) * $maxpics) . $urlsuffix;
else {
if (array_key_exists('dir', $_REQUEST)) {
$u = substr($url, 0, strlen($url) - 1) . $urlsuffix;
} else {
$u = ereg_replace('^([^?]+).*$', '\1', $_SERVER['REQUEST_URI']);
if (!empty($urlsuffix)) {
if (strstr($u, '?') === false) $u .= '?' . substr($urlsuffix, 1);
else $u .= $urlsuffix;
}
}
}
echo('<a href="' . h($u) . '">[-]</a>');
if ($pic + 1 < sizeof($pics))
echo(' <a href="' . h($url) . 'pic=' . ($pic + 1) . h($urlsuffix) . '">[&gt;]</a>');
echo("\n</div>\n");
} else {
if (sizeof($dirs) > 0 && $subdirs) {
echo("<ul id=\"directories\">\n");
foreach ($dirs as $filename) {
if ($rp) $target = substr(realpath($realdir . $delim . $filename), strlen($root));
else $target = substr($realdir . $delim . $filename, strlen($root));
if ($delim == '\\') $target = strtr($target, '\\', '/');
if ($target == '') {
$url = ereg_replace('^([^?]+).*$', '\1', $_SERVER['REQUEST_URI']);
if (!empty($urlsuffix)) {
if (strstr($url, '?') === false) $url .= '?' . substr($urlsuffix, 1);
else $url .= $urlsuffix;
}
} else $url = '?dir=' . urlencode($target) . $urlsuffix;
echo('<li><a href="' . h($url) . '">' . h($filename) . "</a></li>\n");
}
echo("</ul>\n<hr />\n");
}
if (($num = sizeof($pics)) > 0) {
if (array_key_exists('offset', $_REQUEST)) $offset = $_REQUEST['offset'];
else $offset = 0;
if ($num > $maxpics) {
echo("<p id=\"pagenumbers\">\n");
for ($i = 0; $i < $num; $i += $maxpics) {
$e = $i + $maxpics - 1;
if ($e > $num - 1) $e = $num - 1;
if ($i != $e) $b = ($i + 1) . '-' . ($e + 1);
else $b = $i + 1;
if ($i == $offset) echo("<b>$b</b>");
else {
$url = ($dirname == '') ? '?' : '?dir=' . urlencode($dirname) . '&amp;';
echo("<a href=\"{$url}offset=$i" . h($urlsuffix) . "\">$b</a>");
}
if ($e != $num - 1) echo(' |');
echo("\n");
}
echo("</p>\n<hr />\n");
}
echo("<p id=\"pictures\">\n");
for ($i = $offset; $i < $offset + $maxpics; $i++) {
if ($i >= $num) break;
$filename = $pics[$i];
$file = $realdir . $delim . $filename;
if (!is_readable($file)) continue;
if (!is_dir($realdir . $delim . $thumbdir)) {
$u = umask(0);
if (!@mkdir($realdir . $delim . $thumbdir, 0777)) {
echo('<p style="color: red; text-align: center">' . w('mkdir_error') . '</span>');
break;
}
umask($u);
}
$thumb = $realdir . $delim . $thumbdir . $delim . $filename . '.thumb.jpg';
if (!is_file($thumb)) {
if (eregi($jpg, $file))
$original = @imagecreatefromjpeg($file);
elseif (eregi($gif, $file))
$original = @imagecreatefromgif($file);
elseif (eregi($png, $file))
$original = @imagecreatefrompng($file);
else continue;
if ($original) {
if (function_exists('getimagesize'))
list($width, $height, $type, $attr) = getimagesize($file);
else continue;
if ($width > $height && $width > $thumbsize) {
$smallwidth = $thumbsize;
$smallheight = floor($height / ($width / $smallwidth));
$ofx = 0; $ofy = floor(($thumbsize - $smallheight) / 2);
} elseif ($width < $height && $height > $thumbsize) {
$smallheight = $thumbsize;
$smallwidth = floor($width / ($height / $smallheight));
$ofx = floor(($thumbsize - $smallwidth) / 2); $ofy = 0;
} else {
$smallheight = $height;
$smallwidth = $width;
$ofx = floor(($thumbsize - $smallwidth) / 2);
$ofy = floor(($thumbsize - $smallheight) / 2);
}
}
if (function_exists('imagecreatetruecolor'))
$small = imagecreatetruecolor($thumbsize, $thumbsize);
else $small = imagecreate($thumbsize, $thumbsize);
sscanf($bg, "%2x%2x%2x", $red, $green, $blue);
$b = imagecolorallocate($small, $red, $green, $blue);
imagefill($small, 0, 0, $b);
if ($original) {
if (function_exists('imagecopyresampled'))
imagecopyresampled($small, $original, $ofx, $ofy, 0, 0, $smallwidth, $smallheight, $width, $height);
else
imagecopyresized($small, $original, $ofx, $ofy, 0, 0, $smallwidth, $smallheight, $width, $height);
} else {
$black = imagecolorallocate($small, 0, 0, 0);
$fw = imagefontwidth($fontsize);
$fh = imagefontheight($fontsize);
$htw = ($fw * strlen($filename)) / 2;
$hts = $thumbsize / 2;
imagestring($small, $fontsize, $hts - $htw, $hts - ($fh / 2), $filename, $black);
imagerectangle($small, $hts - $htw - $fw - 1, $hts - $fh, $hts + $htw + $fw - 1, $hts + $fh, $black);
}
imagejpeg($small, $thumb);
}
if ($filenames) echo('<div>');
if ($included && $inline) {
echo('<a href="?');
if (array_key_exists('dir', $_REQUEST)) echo('dir=' . urlencode($_REQUEST['dir']) . '&amp;');
echo('pic=' . $i . h($urlsuffix));
} else echo('<a href="' . h("$dirnamehttp/$filename"));
echo('" target="blank"');
echo('><img src="' . h("$dirnamehttp/thumbs/$filename.thumb.jpg"));
echo('" ');
echo("width: {$thumbsize}px; height: {$thumbsize}px\" />");
if ($filenames) echo('<p>' . h($filename) . '</p>');
echo('</a>');
if ($filenames) echo("</div>\n"); else echo("\n");
}
echo("</p>\n");
if (!$included) {
echo('<hr');
if ($filenames) echo(' class="clear"');
echo(" />\n");
}
}
}

}
if (!$included) echo("</body>\n</html>");
?>


</body>
</html>

mat106
06-19-2005, 10:18 PM
Hi,

Could you not pass the image name as a query string and then use GET or POST to retrieve it in the page you set up for viewing the full size images in a similar way to the way you are using the offset query string in http://www.babyseashimmer.com/gallery/gallerytest2.php?offset=20. Something along the lines of:


http://www.babyseashimmer.com/gallery/gallerytest2.php?image=2collector.jpg

Shimmer82
06-19-2005, 10:20 PM
I'm sorry, I don't quite understand. I'm not very good with php. It took me like an hour to figure out how to make it open in a new window.

mat106
06-19-2005, 10:40 PM
Instead of having your script linking the thumbnails directly to the full sized images (i.e. instead of having http://www.babyseashimmer.com/gallery/2playset.jpg etc...) you can link the thumbnails to something of the form http://www.babyseashimmer.com/gallery/viewpic.php?image=2collector.jpg with the value of image being generated by the script and uniquely corresponding to the correct full size image as the script iterates through your directories.

You will then set up viewpic.php with any HTML/CSS formatting you want and use:

$image = $_GET['image'];
to get the value of image from the URL and:

echo "<img src='$image' />"
to display the image.

Does that help?

Shimmer82
06-20-2005, 03:35 AM
yea, that deffinately makes more since to me! Thanks a bunch!

Here is what I have for the viewpic.php page:


<html>
<head>
<title>Gallery</title>
</head>

<body>
<?php
$image = $_GET['image'];
echo "<img src='$image' />"
?>
</body>
</html>I'm not positive if that's right or not?

And I'm not quite sure what to do on the gallery page. I know what line I'm supposed to be editing:


} else echo('<a href="' . h("$dirnamehttp/$filename")); But I'm not sure what to do to make it generate the link with the image name in it. Something like:


} else echo('<a href="'viewpic.php?")); wow I have no clue. :(

Shimmer82
06-20-2005, 03:58 AM
Ok, I'm trying! hehe I've gotten this:


} else echo('<a href="');
echo('viewpic.php?image=');
echo('$filename.jpg"'); But I guess $filename isn't what I'm supposed to use to get the image name there? It's doing this:

<a href="viewpic.php?image=$filename.jpg"

Shimmer82
06-20-2005, 04:20 AM
yay!!!!!!!!!!!!!! I got it! It helps to talk things out I guess. hehe!

http://www.babyseashimmer.com/gallery/gallerytest4.php

thank you thank you thank you!



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum