/[cvs]/expose/index.php
ViewVC logotype

Annotation of /expose/index.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide annotations)
Wed Nov 5 15:40:21 2003 UTC (20 years, 6 months ago) by cam
Branch: MAIN
Changes since 1.3: +66 -15 lines
Added resizing of images and thumbnail browsing.

1 cam 1.1 <?php
2     /* vim: set ts=4:
3     +----------------------------------------------------------------------+
4     | expose, a simple image gallery written in php4.
5     +----------------------------------------------------------------------+
6     | Copyright 2003 Carl Johan Schedvin
7     | This program is distributed under the terms of the
8     | GNU General Public License, Version 2
9     |
10     | This program is free software; you can redistribute it and/or modify
11     | it under the terms of the GNU General Public License, Version 2 as
12     | published by the Free Software Foundation.
13     |
14     | This program is distributed in the hope that it will be useful,
15     | but WITHOUT ANY WARRANTY; without even the implied warranty of
16     | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17     | GNU General Public License for more details.
18     |
19     | You should have received a copy of the GNU General Public License,
20     | Version 2 along with this program; if not, visit GNU's Home Page
21     | http://www.gnu.org/
22     +----------------------------------------------------------------------+
23 cam 1.4 $Id: index.php,v 1.3 2003/11/05 14:21:33 cam Exp $
24 cam 1.1 */
25    
26     $global_var['metadata']['author'] = "Carl Johan Schedvin <cjsc02@student.bth.se>";
27     $global_var['metadata']['keywords'] = "photos,gallery,album,digitalcamera,fuji,finepix";
28     $global_var['metadata']['description'] = "An photogallery written in PHP4";
29    
30    
31     $global_var['str_msg']['copyright'] = "all photos &copy; copyright Carl Johan Schedvin. all rights reserved.";
32    
33     $global_var['external']['magick'] = "/usr/bin/convert";
34    
35     $global_var['path']['thumb_dir'] = '.thumbs';
36     $global_var['path']['cache_dir'] = '.cache';
37    
38     $global_var['image_sz']['thumb'] = array (
39     'x' => 120,
40     'y' => 80,
41     'ql' => 70,
42     'wm' => ''
43     );
44     $global_var['image_sz']['640'] = array (
45     'x' => 640,
46     'y' => 480,
47     'ql' => 88,
48     'wm' => ''
49     );
50     $global_var['image_sz']['800'] = array (
51     'x' => 800,
52     'y' => 600,
53     'ql' => 89,
54     'wm' => ''
55     );
56     $global_var['image_sz']['1024'] = array (
57     'x' => 1024,
58     'y' => 768,
59     'ql' => 90,
60     'wm' => ''
61     );
62    
63 cam 1.4 $global_var['image_sz']['default'] =& $global_var['image_sz']['640'];
64 cam 1.1
65     if(isset($_SERVER['PHP_SELF'])) {
66     $php_self = $_SERVER['PHP_SELF'];
67     } else {
68     $php_self = $HTTP_SERVER_VARS['PHP_SELF'];
69     }
70    
71     if (isset($_GET)) {
72     $get_vars = $_GET;
73     } else {
74     $get_vars = $HTTP_GET_VARS;
75     }
76    
77    
78    
79     /**
80     * ! NOT IMPLEMENTED !
81     *
82     * Extracts the EXIF header of a JPG if available using
83     * built-in php function exif_read_data, this information
84     * is extracted upon request and not written to disk.
85     */
86     function extract_exif_data()
87     {
88     }
89    
90    
91    
92    
93     function create_thumbnail($src_image)
94     {
95     global $global_var, $pwd;
96     if(isset($global_var['external']['magick'])) {
97     if(file_exists($pwd.'/'.$src_image)) {
98     $src_image_sz = GetImageSize($pwd.'/'.$src_image);
99     $resize_aspect = round(($global_var['image_sz']['thumb']['y'] / $src_image_sz[1])*100, 2);
100     exec($global_var['external']['magick']
101     .' -geometry '.$resize_aspect.'%'
102     .' -quality '.$global_var['image_sz']['thumb']['ql']
103     .' '.$pwd.'/'.$src_image
104     .' '.$pwd.'/'.$global_var['path']['thumb_dir'].'/'.$src_image
105     );
106     }
107     }
108     }
109    
110    
111     function print_thumbnails()
112     {
113     global $global_var, $image_files, $pwd;
114    
115     // check if thumbnail directory exists, if not create it.
116     if(!file_exists($pwd.'/'.$global_var['path']['thumb_dir']))
117     mkdir($pwd.'/'.$global_var['path']['thumb_dir'],0777);
118    
119 cam 1.4 echo <<<EOT
120     <div id="thumbnails_container">\n
121    
122     EOT;
123    
124 cam 1.1 foreach($image_files as $image) {
125    
126 cam 1.4 $thumb_image = $pwd.'/'.$global_var['path']['thumb_dir'].'/'.$image;
127    
128 cam 1.1 // check if a thumbnail for current image exists, if not create one.
129 cam 1.4 if(!file_exists($thumb_image))
130 cam 1.1 create_thumbnail($image);
131    
132 cam 1.4 $thumb_sz = GetImageSize($thumb_image);
133    
134 cam 1.1 echo <<<EOT
135 cam 1.4 <div class="thumbnail" style="width: {$thumb_sz[0]}px; height: {$thumb_sz[1]}px;">\n
136     <a href="$php_self?dir=$pwd&img=$image">
137     <img src="$thumb_image" alt=""/>
138     </a>
139     </div>\n
140 cam 1.1 EOT;
141     }
142 cam 1.4
143     echo <<<EOT
144     </div>\n
145     <div style="clear: both;"><br/></div>\n
146     EOT;
147 cam 1.1 }
148    
149    
150    
151    
152     function show_image()
153     {
154     global $global_var, $get_vars, $pwd;
155    
156 cam 1.4 $image = $pwd.'/'.$get_vars['img'];
157    
158     $cached_image = $pwd.'/'.$global_var['path']['cache_dir'];
159    
160     if(file_exists($image)) {
161    
162     $image_size = GetImageSize($image);
163    
164     if(isset($get_var['width'])) {
165     if($get_var['width'] >= $image_size[0])
166     $cache_image = $image;
167     } else {
168     if(!file_exists($cached_image.'/default_'.$get_vars['img'])) {
169     resize_image('default_');
170     }
171     $cached_image = $cached_image.'/default_'.$get_vars['img'];
172     }
173    
174     $image_size = GetImageSize($cached_image);
175    
176 cam 1.1 echo <<<EOT
177 cam 1.4 <div id="image" style="width: {$image_size[0]}px; height: {$image_size[1]}px;">\n
178     <a href="$image" target="_blank"><img src="$cached_image" alt=""></a>
179 cam 1.1 </div>\n
180     EOT;
181     }
182     }
183    
184    
185    
186    
187 cam 1.4 function resize_image($prefix)
188 cam 1.1 {
189 cam 1.4 global $global_var, $get_vars, $pwd;
190     $src_image = $get_vars['img'];
191     if(isset($global_var['external']['magick'])) {
192     if(file_exists($pwd.'/'.$src_image)) {
193     $src_image_sz = GetImageSize($pwd.'/'.$src_image);
194     $resize_aspect = round(($global_var['image_sz']['default']['y'] / $src_image_sz[1])*100, 2);
195    
196     // DEBUG: print "Quality: ".$global_var['image_sz']['default']['ql'] ." Resize Aspect: ". $resize_aspect ."%";
197    
198     exec($global_var['external']['magick']
199     .' -geometry '.$resize_aspect.'%'
200     .' -quality '.$global_var['image_sz']['default']['ql']
201     .' '.$pwd.'/'.$src_image
202     .' '.$pwd.'/'.$global_var['path']['cache_dir'].'/'.$prefix.$src_image
203     );
204     }
205     }
206 cam 1.1 }
207    
208    
209     /**
210     * Retirieves all filenames that are images exclude all
211     * other files. It's not recursive so it only examins the
212     * pwd and not sub directories if present.
213     *
214     * @param str $path, pwd
215     * @return @rray $images, list of all filenames
216     */
217     function &get_image_filenames($path)
218     {
219     global $global_var;
220     $images = array();
221    
222     if(is_dir($path)) {
223     $pwd_dd = opendir($path);
224     while(($file = readdir($pwd_dd)) !== false) {
225     if(is_file($path."/".$file)
226     && !eregi("^\.|^.*.php|^.*.css|^.*~",$file))
227     array_push($images, $file);
228     }
229     }
230     return $images;
231     }
232    
233    
234    
235 cam 1.4
236 cam 1.1 /**
237     * Retrieves all directory names present in $path. Using
238     * eregi we exclude names we don't want in the list.
239     */
240     function &get_directory_names($path)
241     {
242     global $global_var;
243     $dirs = array();
244    
245     if(is_dir($path)) {
246     $pwd_dd = opendir($path);
247     while(($file = readdir($pwd_dd)) !== false) {
248     if(is_dir($path."/".$file)
249 cam 1.2 && !eregi("^\.|^\..|^CVS|^". $global_var['path']['thumb_dir']
250 cam 1.1 ."|^". $global_var['path']['cache_dir'],$file))
251     array_push($dirs, $file);
252     }
253     }
254     return $dirs;
255     }
256    
257    
258    
259 cam 1.4
260 cam 1.1 if (isset($get_vars['dir']) && is_dir(rawurldecode($get_vars['dir'])))
261     {
262     $pwd = rawurldecode($get_vars['dir']);
263     } else {
264     $pwd = './';
265     }
266    
267     $image_files =& get_image_filenames($pwd);
268     $dir_files =& get_directory_names($pwd);
269    
270    
271     // print the html header before continuing processing.
272     html_template_header();
273    
274    
275     if(sizeof($image_files) <= 0) {
276     if(sizeof($dir_files) > 0) {
277     } else {
278     }
279     } else {
280     if(sizeof($dir_files) > 0) {
281     }
282     if(isset($get_vars['img'])) {
283     show_image();
284     } else {
285     print_thumbnails();
286     }
287     }
288    
289     // print the html footer to make it nice and tidy.
290     html_template_footer();
291    
292    
293    
294    
295    
296    
297    
298    
299    
300     /**
301     * Prints the html header, contains html document specific
302     * definitions and paths. Tags as <title> are set dynamically
303     * everytime the page is reloaded. The template is encapsulated
304     * in a function for structural reasons.
305     */
306     function html_template_header()
307     {
308     global $global_var;
309     echo <<<EOF
310     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
311     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
312     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
313    
314     <head>
315    
316     <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
317     <meta name="author" content="{$global_var[metadata][author]}" />
318     <meta name="keywords" content="{$global_var[metadata][keywords]}" />
319     <meta name="description" content="{$global_var[metadata][description]}" />
320     <meta name="robots" content="all" />
321    
322 cam 1.4 <title>expose: </title>
323 cam 1.1
324     <style type="text/css">
325     @import "/~ikea/style.css";
326     </style>
327    
328     <link rel="Shortcut Icon" type="image/x-icon" href="/img/favicon.ico" />
329    
330     </head>
331    
332     <body>
333    
334     <div id="container">\n
335     EOF;
336     }
337    
338    
339    
340    
341     /**
342     * Prints the html footer, this contains only closing
343     * tags for the html document and the copyright notice.
344     */
345     function html_template_footer()
346     {
347     global $global_var;
348     echo <<<EOF
349     <div id="copyright">\n
350 cam 1.3 {$global_var[str_msg][copyright]}<br />
351 cam 1.4 <a href="">expose</a> <span style="font-style: italic;">Cvs version: \$Revision: 1.3 $</span>
352 cam 1.1 </div>
353     </div>
354     </body>
355     </html>
356     EOF;
357     }
358     ?>

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26