#!/usr/bin/perl -w #thumbnail_webpage.pl #version 1.5 #Copyright 2003-2006 John C. Vernaleo #Unfortunately, I am not comfortable putting unobscured email addresses #on the web, but these shouldn't be too hard to figure out. # # (my_first_name)@netpurgatory.com # or # (my_last_name)@astro.umd.edu # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # See readme_thumbnails.txt for more information and a copy of the GPL my $main_dir=$ARGV[0]; unless(defined($main_dir)){ print "Type directory name with pictures: "; chomp($main_dir=); } chdir $main_dir or die "Cannot change to $main_dir $!"; print "now in $main_dir\n"; my $clean=0; if(defined($ARGV[1])&&($ARGV[1] eq "-c")){ $clean=1; print "Making new thumbnails and mid-sized images\n"; } #Need this to take care of main_dir my @dirs; my @tmp2=glob "*"; my $tmp2; my $haspic=0; my $top=0; foreach $tmp2 (@tmp2) { if(($tmp2=~".jpg")||($tmp2=~".JPG")||($tmp2=~".jpeg")||($tmp2=~".JPEG")||($tmp2=~".png")) { $haspic=1; } } if($haspic) { push(@dirs,"./"); } #this finds sub directories &get_dir(); #Only make main page if there are subdirectories. if($#dirs==0){ if($haspic){ &mkthumbs; } } #extra if instead of an else so if there are no pictures an empty #index.html file is not made. if($#dirs>0){ if($haspic) { $top=1; &mkthumbs; $top=0; } open MAINPAGE, ">index.html" or die "cannot open index.html $!"; select MAINPAGE; &page_top; print "Listing of Pictures\n"; print "\n\n"; print "

Listing of Picture Thumbnails

\n"; print "

\n"; print "\n"; print 'Go back

'."\n"; for($j=0;$j<=$#dirs;$j++) { $_=$dirs[$j]; if(($j==0)&&($_=~'./')){ print "'."$_\n"; }else{ print "'."$_\n"; } print "
\n"; } print "

\n\n"; close MAINPAGE; } #Subroutines sub get_dir{ my ($base)=(@_); my $base2; my @tmp=glob "*"; my @tmp2; my $tmp2; my $haspic; foreach (@tmp) { $haspic=0; if((-d $_)&&($_ ne "pages")&&($_ ne "thumbs")&&($_ ne "mid")) { chdir $_ or die "Cannot change to $_ $!"; if($base) { $base2=$base."/$_"; }else{ $base2=$_; } @tmp2=glob "*"; foreach $tmp2 (@tmp2) { if(($tmp2=~".jpg")||($tmp2=~".JPG")||($tmp2=~".jpeg")||($tmp2=~".JPEG")||($tmp2=~".png")) { $haspic=1; } } if($haspic) { push(@dirs,$base2); &mkthumbs; } &get_dir($base2); chdir ".."; } } } sub mkthumbs{ my @jpg=glob "*.jpg"; my @jpg2=glob "*.JPG"; my @gif=glob "*.gif"; my @gif2=glob "*.GIF"; my @png=glob "*.png"; my @png2=glob "*.PNG"; my @pics; push(@pics,@jpg); push(@pics,@jpg2); push(@pics,@gif); push(@pics,@gif2); push(@pics,@png); push(@pics,@png2); unless (-e "thumbs"){ mkdir "thumbs" or die "Can't make directory: $!"; } unless (-e "mid"){ mkdir "mid" or die "Can't make directory: $!"; } unless (-e "pages"){ mkdir "pages" or die "Can't make directory: $!"; } foreach $file (@pics) { my $size="120"; my $command="convert -size $size"."x$size $file -resize $size"."x$size +profile ".'"*"'." thumbs/thum_".$file; if(($clean)||!(-e "thumbs/thum_$file")){ system $command; } $size="900"; $command="convert -size $size"."x$size $file -resize $size"."x$size +profile ".'"*"'." mid/mid_".$file; if(($clean)||!(-e "mid/mid_$file")){ system $command; } } # This is just to help clean up files from old version of script if(-e "pages/pictures.html"){ unlink "pages/pictures.html"; } # if($top){ open WEBPAGE, ">index2.html" or die "Cannot create file: $!"; }else{ open WEBPAGE, ">index.html" or die "Cannot create file: $!"; } select WEBPAGE; &page_top; print "\n"; &body(@pics); close WEBPAGE; } sub page_top{ print "\n"; print ''."\n"; print ''."\n"; print "\n"; } sub body{ (@pics)=(@_); my $file; print "Pictures\n"; print "\n\n"; print '

Back to main picture page.

'."\n"; print "

\n"; for($i=0;$i<=$#pics;$i++) { $file=$pics[$i]; select WEBPAGE; print ''; print ''.$file.''; print "\n"; #make individual picture page open PAGE, ">pages/".($i+1).".html" or die "Cannot create file: $!"; select PAGE; &page_top; print "Picture ".($i+1)." of ".($#pics+1)."\n"; print "\n\n"; &navigation; print '

'; print ''.$file.''."\n

\n"; &navigation; print "\n"; close PAGE; } select WEBPAGE; print "

\n\n"; } sub navigation{ print "

\n"; if($#pics==0){ print 'Index'."\n"; }else{ if(($i==0)||($i==$#pics)){ if($i==0){ print 'Index'."\n"; print 'Next Picture'."\n"; } if($i==($#pics)){ print 'Previous Picture'."\n"; print 'Index'."\n"; } } else{ print 'Previous Picture'."\n"; print 'Index'."\n"; print 'Next Picture'."\n"; } print "
\nClick on picture for Full-Sized version.\n"; } print "

\n"; }