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

Annotation of /expose/index.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (hide annotations)
Fri Nov 7 23:12:11 2003 UTC (20 years, 6 months ago) by cam
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +25 -3 lines
Added FlashMode to the EXIF headers

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.9 $Id: index.php,v 1.8 2003/11/07 22:39:24 cam Exp $
24 cam 1.6
25    
26    
27     // CODE FOR EMBEDDING AVI/MPEG/MOV FILES IN HTML
28    
29     <embed src="filename" autostart="false" width="320" height="240" align="left" oncursor="play" hspace="20">
30     <noembed>
31     <a href="filename">click to view</a>
32     <img dynsrc="filename" start="mouseover" align="left" controls width="320" height="240" hspace="25">
33     </a>
34     </noembed>
35 cam 1.1 */
36    
37     $global_var['metadata']['author'] = "Carl Johan Schedvin <cjsc02@student.bth.se>";
38     $global_var['metadata']['keywords'] = "photos,gallery,album,digitalcamera,fuji,finepix";
39     $global_var['metadata']['description'] = "An photogallery written in PHP4";
40    
41    
42     $global_var['str_msg']['copyright'] = "all photos &copy; copyright Carl Johan Schedvin. all rights reserved.";
43    
44     $global_var['external']['magick'] = "/usr/bin/convert";
45    
46     $global_var['path']['thumb_dir'] = '.thumbs';
47     $global_var['path']['cache_dir'] = '.cache';
48    
49     $global_var['image_sz']['thumb'] = array (
50     'x' => 120,
51     'y' => 80,
52     'ql' => 70,
53     'wm' => ''
54     );
55     $global_var['image_sz']['640'] = array (
56     'x' => 640,
57     'y' => 480,
58     'ql' => 88,
59     'wm' => ''
60     );
61     $global_var['image_sz']['800'] = array (
62     'x' => 800,
63     'y' => 600,
64     'ql' => 89,
65     'wm' => ''
66     );
67     $global_var['image_sz']['1024'] = array (
68     'x' => 1024,
69     'y' => 768,
70     'ql' => 90,
71     'wm' => ''
72     );
73    
74 cam 1.7 $global_var['image_sz']['valid_sizes'] = array (
75     '640x480',
76     '800x600',
77     '1024x768'
78     );
79    
80 cam 1.4 $global_var['image_sz']['default'] =& $global_var['image_sz']['640'];
81 cam 1.1
82 cam 1.5 $exif_headers = array ();
83    
84    
85 cam 1.1 if(isset($_SERVER['PHP_SELF'])) {
86     $php_self = $_SERVER['PHP_SELF'];
87     } else {
88     $php_self = $HTTP_SERVER_VARS['PHP_SELF'];
89     }
90    
91     if (isset($_GET)) {
92     $get_vars = $_GET;
93     } else {
94     $get_vars = $HTTP_GET_VARS;
95     }
96    
97    
98    
99     /**
100     * Extracts the EXIF header of a JPG if available using
101     * built-in php function exif_read_data, this information
102     * is extracted upon request and not written to disk.
103     */
104     function extract_exif_data()
105     {
106 cam 1.5 global $global_var, $pwd, $get_vars, $exif_headers;
107    
108     $src_image = $get_vars['img'];
109     $exif_data = @exif_read_data($pwd.'/'.$src_image,0,true);
110    
111     if($exif_data) {
112    
113     foreach($exif_data as $exif_section_key => $exif_section) {
114     foreach($exif_section as $exif_key => $exif_value) {
115    
116     switch($exif_key) {
117 cam 1.7 case 'Model':
118 cam 1.5 array_push($exif_headers, 'Model: '.$exif_value);
119     break;
120    
121     case 'ApertureFNumber':
122     array_push($exif_headers, 'Aperture: '. $exif_value);
123     break;
124    
125     case 'FocalLength':
126 cam 1.6 $factor = 6.49122807;
127     $vars = split("/",$exif_value);
128     $focal_length = round(($vars[0]/$vars[1])*$factor);
129     array_push($exif_headers, 'Focal Length: '. $focal_length .'mm');
130 cam 1.5 break;
131    
132     case 'DateTime':
133     array_push($exif_headers, 'Date: '.$exif_value);
134     break;
135    
136     case 'FlashMode':
137     switch($exif_value) {
138     case '0':
139 cam 1.9 array_push($exif_headers, 'Flash: Auto');
140     break;
141     case '1':
142     array_push($exif_headers, 'Flash: On');
143     break;
144     case '2':
145 cam 1.5 array_push($exif_headers, 'Flash: Off');
146     break;
147 cam 1.9 case '3':
148     array_push($exif_headers, 'Flash: Red-Eye Reduction');
149     break;
150     default:
151     array_push($exif_headers, 'Flash: Unknown');
152     break;
153     }
154     break;
155     case 'FocusMode':
156    
157     switch($exif_value) {
158     case '0':
159     array_push($exif_headers, 'Focus: C-AF/S-AF');
160     break;
161 cam 1.5 case '1':
162 cam 1.9 array_push($exif_headers, 'Focus: MF');
163     break;
164     default:
165 cam 1.5 break;
166     }
167     break;
168 cam 1.7 case 'ISOSpeedRatings';
169     array_push($exif_headers, 'ISO: '.$exif_value);
170     break;
171 cam 1.5 default:
172     break;
173     }
174     }
175     }
176     if(sizeof($exif_headers)>0) {
177     ksort($exif_headers);
178     reset($exif_headers);
179     }
180     }
181 cam 1.1 }
182    
183    
184    
185    
186     function create_thumbnail($src_image)
187     {
188     global $global_var, $pwd;
189     if(isset($global_var['external']['magick'])) {
190     if(file_exists($pwd.'/'.$src_image)) {
191     $src_image_sz = GetImageSize($pwd.'/'.$src_image);
192     $resize_aspect = round(($global_var['image_sz']['thumb']['y'] / $src_image_sz[1])*100, 2);
193     exec($global_var['external']['magick']
194     .' -geometry '.$resize_aspect.'%'
195     .' -quality '.$global_var['image_sz']['thumb']['ql']
196     .' '.$pwd.'/'.$src_image
197     .' '.$pwd.'/'.$global_var['path']['thumb_dir'].'/'.$src_image
198     );
199     }
200     }
201     }
202    
203    
204     function print_thumbnails()
205     {
206     global $global_var, $image_files, $pwd;
207    
208     // check if thumbnail directory exists, if not create it.
209     if(!file_exists($pwd.'/'.$global_var['path']['thumb_dir']))
210     mkdir($pwd.'/'.$global_var['path']['thumb_dir'],0777);
211    
212 cam 1.4 echo <<<EOT
213     <div id="thumbnails_container">\n
214    
215     EOT;
216    
217 cam 1.1 foreach($image_files as $image) {
218    
219 cam 1.4 $thumb_image = $pwd.'/'.$global_var['path']['thumb_dir'].'/'.$image;
220    
221 cam 1.1 // check if a thumbnail for current image exists, if not create one.
222 cam 1.4 if(!file_exists($thumb_image))
223 cam 1.1 create_thumbnail($image);
224    
225 cam 1.4 $thumb_sz = GetImageSize($thumb_image);
226    
227 cam 1.1 echo <<<EOT
228 cam 1.4 <div class="thumbnail" style="width: {$thumb_sz[0]}px; height: {$thumb_sz[1]}px;">\n
229     <a href="$php_self?dir=$pwd&img=$image">
230     <img src="$thumb_image" alt=""/>
231     </a>
232     </div>\n
233 cam 1.1 EOT;
234     }
235 cam 1.4
236     echo <<<EOT
237     </div>\n
238     <div style="clear: both;"><br/></div>\n
239     EOT;
240 cam 1.1 }
241    
242    
243    
244    
245     function show_image()
246     {
247 cam 1.5 global $global_var, $get_vars, $pwd, $exif_headers;
248 cam 1.1
249 cam 1.4 $image = $pwd.'/'.$get_vars['img'];
250    
251     $cached_image = $pwd.'/'.$global_var['path']['cache_dir'];
252    
253     if(file_exists($image)) {
254    
255     $image_size = GetImageSize($image);
256 cam 1.7 $src_image_size = $image_size;
257 cam 1.4
258 cam 1.7 if(isset($get_vars['width'])) {
259    
260     $cache_size = split("x",$get_vars['width']);
261    
262     if($cache_size[0] >= $src_image_size[0]) {
263 cam 1.4 $cache_image = $image;
264 cam 1.7 } else {
265     if(array_search($get_vars['width'], $global_var['image_sz']['valid_sizes'])) {
266     if(!file_exists($pwd.'/.cache/'.$get_vars['width'].'_'.$get_vars['img'])) {
267     resize_image($get_vars['width'].'_');
268     }
269     $cached_image = $pwd.'/.cache/'.$get_vars['width'].'_'.$get_vars['img'];
270     }
271     if($cache_size[0] == $global_var['image_sz']['default']['x'])
272     $cached_image = $cached_image.'/default_'.$get_vars['img'];
273     }
274    
275 cam 1.4 } else {
276     if(!file_exists($cached_image.'/default_'.$get_vars['img'])) {
277     resize_image('default_');
278 cam 1.7
279 cam 1.4 }
280     $cached_image = $cached_image.'/default_'.$get_vars['img'];
281 cam 1.7
282 cam 1.4 }
283    
284     $image_size = GetImageSize($cached_image);
285 cam 1.5
286     extract_exif_data();
287    
288     if(sizeof($exif_headers) > 0) {
289    
290 cam 1.6 $exif_str .= sprintf("<span style=\"font-weight: bold; color:#333;\">EXIF</span> ");
291 cam 1.5
292     foreach($exif_headers as $exif_tag) {
293     $exif_str .= sprintf("| %s ", $exif_tag);
294     }
295    
296     echo <<<EOT
297     <div id="exif_headers">\n
298     <span>$exif_str</span>\n
299     </div>\n
300     EOT;
301 cam 1.4
302 cam 1.5 }
303    
304    
305 cam 1.1 echo <<<EOT
306 cam 1.4 <div id="image" style="width: {$image_size[0]}px; height: {$image_size[1]}px;">\n
307     <a href="$image" target="_blank"><img src="$cached_image" alt=""></a>
308 cam 1.1 </div>\n
309     EOT;
310 cam 1.5
311     $image_index = get_image_index();
312     $next = get_next_image($image_index);
313     $prev = get_prev_image($image_index);
314 cam 1.7
315     echo <<<EOT
316     <span style="font-weight: bold;">Size:</span>&nbsp;
317     EOT;
318 cam 1.5
319 cam 1.7 foreach($global_var['image_sz']['valid_sizes'] as $new_size) {
320    
321     if($get_vars['width'] == $new_size) {
322     echo $new_size;
323     } elseif($cache_size[0] >= $src_image_size[0]) {
324     } else {
325    
326     echo <<<EOT
327     <a href="$php_self?dir=$pwd&img={$get_vars[img]}&width=$new_size">$new_size</a>&nbsp;
328     EOT;
329     }
330    
331     }
332    
333 cam 1.5 echo <<<EOT
334 cam 1.7 <a href="$pwd/{$get_vars[img]}" target="_blank">{$src_image_size[0]}x{$src_image_size[1]}</a>
335     EOT;
336    
337     echo <<<EOT
338     <div>\n
339     <a href="$php_self?dir=$pwd&img=$prev">prev</a>
340     <a href="$php_self?dir=$pwd&img=$next">next</a>\n
341     </div>\n
342 cam 1.5 EOT;
343    
344 cam 1.1 }
345     }
346    
347    
348    
349    
350 cam 1.4 function resize_image($prefix)
351 cam 1.1 {
352 cam 1.4 global $global_var, $get_vars, $pwd;
353     $src_image = $get_vars['img'];
354 cam 1.6 $cache_dir = $pwd.'/'.$global_var['path']['cache_dir'];
355    
356 cam 1.4 if(isset($global_var['external']['magick'])) {
357     if(file_exists($pwd.'/'.$src_image)) {
358 cam 1.7
359 cam 1.4 $src_image_sz = GetImageSize($pwd.'/'.$src_image);
360     $resize_aspect = round(($global_var['image_sz']['default']['y'] / $src_image_sz[1])*100, 2);
361 cam 1.7 $resize_quality = $global_var['image_sz']['default']['ql'];
362    
363     if(isset($get_vars['width'])) {
364     $new_width = split("x", $get_vars['width']);
365     $resize_aspect = round(($new_width[1] / $src_image_sz[1])*100, 2);
366     }
367 cam 1.4
368 cam 1.8 // DEBUG: print "Quality: ".$global_var['image_sz']['default']['ql'] ." Resize Aspect: ". $resize_aspect ."%";
369    
370 cam 1.6 if(!file_exists($cache_dir))
371     mkdir($cache_dir,0777);
372 cam 1.4
373 cam 1.7 $debug = array();
374    
375 cam 1.4 exec($global_var['external']['magick']
376     .' -geometry '.$resize_aspect.'%'
377 cam 1.7 .' -quality '.$resize_quality
378 cam 1.4 .' '.$pwd.'/'.$src_image
379 cam 1.7 .' '.$pwd.'/'.$global_var['path']['cache_dir'].'/'.$prefix.$src_image, $debug, $ret_val
380 cam 1.4 );
381 cam 1.7
382     print_r($debug);
383 cam 1.4 }
384     }
385 cam 1.1 }
386    
387    
388 cam 1.5
389    
390     function get_image_index()
391     {
392     global $get_vars, $image_files;
393    
394     return array_search($get_vars['img'], $image_files);
395     }
396    
397     function get_next_image($pos)
398     {
399     global $get_vars, $image_files;
400    
401     $next = $pos + 1;
402    
403     if($next >= sizeof($image_files))
404     $next = 0;
405    
406     return $image_files[$next];
407     }
408    
409     function get_prev_image($pos)
410     {
411     global $get_vars, $image_files;
412    
413     $prev = $pos - 1;
414    
415     if($prev < 0)
416     $prev = sizeof($image_files) - 1;
417    
418     return $image_files[$prev];
419     }
420    
421 cam 1.6
422     function get_split_path()
423     {
424     global $pwd;
425    
426     $split_path = split('/', $pwd);
427    
428     return $split_path;
429     }
430 cam 1.1 /**
431     * Retirieves all filenames that are images exclude all
432     * other files. It's not recursive so it only examins the
433     * pwd and not sub directories if present.
434     *
435     * @param str $path, pwd
436     * @return @rray $images, list of all filenames
437     */
438     function &get_image_filenames($path)
439     {
440     global $global_var;
441     $images = array();
442    
443     if(is_dir($path)) {
444     $pwd_dd = opendir($path);
445     while(($file = readdir($pwd_dd)) !== false) {
446     if(is_file($path."/".$file)
447 cam 1.6 && !eregi("^\.|^.*.php|^.*.css|^.*~|^.txt",$file))
448 cam 1.1 array_push($images, $file);
449     }
450     }
451     return $images;
452     }
453    
454    
455    
456 cam 1.4
457 cam 1.1 /**
458     * Retrieves all directory names present in $path. Using
459     * eregi we exclude names we don't want in the list.
460     */
461     function &get_directory_names($path)
462     {
463     global $global_var;
464     $dirs = array();
465    
466     if(is_dir($path)) {
467     $pwd_dd = opendir($path);
468     while(($file = readdir($pwd_dd)) !== false) {
469     if(is_dir($path."/".$file)
470 cam 1.2 && !eregi("^\.|^\..|^CVS|^". $global_var['path']['thumb_dir']
471 cam 1.1 ."|^". $global_var['path']['cache_dir'],$file))
472     array_push($dirs, $file);
473     }
474     }
475     return $dirs;
476     }
477    
478    
479    
480 cam 1.4
481 cam 1.6
482    
483 cam 1.7 function create_directory_browser()
484     {
485     global $pwd, $dir_files;
486    
487     if(sizeof($dir_files)>0) {
488    
489     foreach($dir_files as $dir) {
490    
491     $dir_image = 'open.png';
492    
493     if(file_exists($pwd.'/'.$dir.'/.htaccess'))
494     $dir_image = 'protected.png';
495    
496     echo <<<EOT
497     <div style="text-align: center;">\n
498     <a href="$php_self?dir=$pwd/$dir">\n
499     <img src="../images/$dir_image" alt=""/><br/>$dir\n
500     </a>\n
501     </div>\n
502     EOT;
503     }
504     }
505     }
506    
507    
508    
509    
510    
511 cam 1.6
512 cam 1.1 if (isset($get_vars['dir']) && is_dir(rawurldecode($get_vars['dir'])))
513     {
514     $pwd = rawurldecode($get_vars['dir']);
515     } else {
516     $pwd = './';
517     }
518    
519     $image_files =& get_image_filenames($pwd);
520     $dir_files =& get_directory_names($pwd);
521    
522    
523     // print the html header before continuing processing.
524     html_template_header();
525    
526 cam 1.6 //if($global_var['navigation_bar'])
527     html_template_navbar();
528 cam 1.1
529     if(sizeof($image_files) <= 0) {
530     if(sizeof($dir_files) > 0) {
531 cam 1.7 create_directory_browser();
532 cam 1.1 } else {
533     }
534     } else {
535     if(sizeof($dir_files) > 0) {
536     }
537     if(isset($get_vars['img'])) {
538     show_image();
539     } else {
540     print_thumbnails();
541     }
542     }
543    
544 cam 1.7
545    
546    
547 cam 1.1 // print the html footer to make it nice and tidy.
548     html_template_footer();
549    
550    
551    
552    
553    
554    
555    
556    
557    
558     /**
559     * Prints the html header, contains html document specific
560     * definitions and paths. Tags as <title> are set dynamically
561     * everytime the page is reloaded. The template is encapsulated
562     * in a function for structural reasons.
563     */
564     function html_template_header()
565     {
566     global $global_var;
567     echo <<<EOF
568     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
569     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
570     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
571    
572     <head>
573    
574     <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
575     <meta name="author" content="{$global_var[metadata][author]}" />
576     <meta name="keywords" content="{$global_var[metadata][keywords]}" />
577     <meta name="description" content="{$global_var[metadata][description]}" />
578     <meta name="robots" content="all" />
579    
580 cam 1.4 <title>expose: </title>
581 cam 1.1
582     <style type="text/css">
583 cam 1.6 @import "./style.css";
584 cam 1.1 </style>
585    
586     <link rel="Shortcut Icon" type="image/x-icon" href="/img/favicon.ico" />
587    
588     </head>
589    
590     <body>
591 cam 1.5 <div id="header">\n
592     <h1>expose:</h1>
593     <span style="font-style: italic;"></span>
594     </div>\n
595 cam 1.1 <div id="container">\n
596     EOF;
597     }
598    
599    
600    
601    
602 cam 1.6
603    
604    
605 cam 1.1 /**
606     * Prints the html footer, this contains only closing
607     * tags for the html document and the copyright notice.
608     */
609     function html_template_footer()
610     {
611     global $global_var;
612     echo <<<EOF
613     <div id="copyright">\n
614 cam 1.6 {$global_var[str_msg][copyright]}<br />\n
615 cam 1.9 <span style="font-style: italic;">\$Revision: 1.8 $</span>\n
616 cam 1.6 </div>\n\n
617     </div>\n
618     </body>\n
619     </html>\n
620 cam 1.1 EOF;
621 cam 1.6 }
622    
623    
624    
625    
626    
627    
628     function html_template_navbar()
629     {
630     global $get_vars;
631     $split_path = get_split_path();
632    
633     if(sizeof($split_path) > 0) {
634    
635     foreach($split_path as $dir) {
636     if($dir!='') {
637     $path .= $dir.'/';
638     echo <<<EOT
639     <a style="text-decoration: none;" href="$php_self?dir=$path">
640     EOT;
641     if($dir == '.')
642     $dir = 'expose';
643    
644     echo <<<EOT
645     $dir</a> &gt;&nbsp;\n
646     EOT;
647     }
648     }
649     if(isset($get_vars['img'])) {
650     echo <<<EOT
651     {$get_vars[img]}
652     EOT;
653     }
654     }
655     }
656    
657 cam 1.1 ?>

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26