[ Date Index ][
Thread Index ]
[ <= Previous by date / thread ] [ Next by date / thread => ]
I've continued to refine the script for generating HTML index pages for jpegs. You can now put some text next to the thumbnails (taken from a file called "captions"), create different index pages and so on. I'll set up a demo on the web soon, but for now here's the latest code Keith ------------------------------------------------------------------------
#!/usr/bin/tclsh
#Usage : mkpixndx [ subdir [ Page Title ... ] ]
#This script looks for *.jpeg, *.jpg, *.JPEG etc. files in the subdirectory
#"subdir" (default "pictures"), generates largish thumbnails in
#subdir/thumbnails using ImageMagick and writes an html catalogue page
#"subdir.html" with the title and heading "Page Title" (default "Picture
#Catalogue").
#Adding or removing jpegs to the subdirectory and re-running the script
#will add or delete entries in the catalogue. Replacing a jpeg by a later
#version with the same file name will cause the thumbnail to be updated.
#To add captions to the thumbnails place a text file named "captions"
#in the directory with the jpegs. Entries should be of the form :
# filename.jpg
# Bold Heading
# Body of caption (several lines if necessary)
#Separate entries by one or more blank lines. "\n" is translated to the
#HTML <br> tag. Other tags may be included with caution.
#A special entry of the form :
# TITLE
# Title for the Picture Index Page
#can be placed anywhere in the captions file and will override the title
#(if any) given on the command line.
#Remember to do "chmod 755 mkpixndx"
#If the script is in the current directory you may need to call it with
# "./mkpixndx ..."
#NB you will need to hack the first two lines of code below to insert your
#own email and web addresses.
# ---------------------------------------------------------------------------
#SUBSTITUTE YOUR WEBSITE ADDRESS HERE :
set url index.html
#SUBSTITUTE YOU EMAIL ADDRESS HERE :
set email "pix@xxxxxxxxxxxxxxxxxxxxxx"
#Take the first word of the command tail as the html filename and
#pictury directory name, or use "pictures" as the default
set filename [lindex $argv 0]
if {![string length $filename]} {set filename pictures}
#Are there any pictures?
if {![file isdirectory $filename]} {
puts "Wot No Pictures!"
exit
}
if {![regexp -nocase .*\.jp.*g [exec ls $filename]]} {
puts "Wot No Pictures!"
exit
}
#Get captions (if file present)
if [file exists $filename/captions] {
set CAP [open $filename/captions]
while {![eof $CAP]} {
gets $CAP line
if {![string match {} $line]} {
set pic $line
gets $CAP line
set head($pic) $line
set text($pic) {}
while {![string match {} $line]} {
gets $CAP line
regsub -all {\\\n} $line "<br>" line
set text($pic) "$text($pic) $line"
}
}
}
close $CAP
}
if [array exists head] {set capslist [array names head]} else {set capslist {}}
#Make directory for thumbnails if necessary
if {![file isdirectory $filename/thumbnails]} {exec mkdir $filename/thumbnails}
#Go through thumbnails directory and delete any that are redundant
cd $filename/thumbnails
foreach thumb [glob -nocomplain th_*.jp*g] {
if {[lsearch [exec ls ..] [string range $thumb 3 end]] == -1} {
puts "Removing $thumb"; exec rm $thumb
}
}
cd ../..
#Open file for writing (if it already exists it will be trashed!)
set HTML [open $filename.html w]
#Write out the html header (remember to escape all the quotes)
puts $HTML "<!-- X-URL: http://$url/$filename.html -->"
puts $HTML "<!-- Date: [exec date "+%a, %e %b %Y %X %Z"] -->"
puts $HTML "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">"
puts $HTML "<HTML VERSION=\"-//W3C//DTD HTML 3.2 Final//EN\">\n<HEAD>"
puts $HTML "<META NAME=\"author\" CONTENT=\"mkpixndx tcl script\">"
#Use the remainder of the command tail as the html page title
#overridden by TITLE entry in "captions" file if present
if {[lsearch $capslist TITLE] != -1} {
set title $head(TITLE)
} else {
set title [lrange $argv 1 end]
}
if {![string length $title]} {set title "Picture Catalogue"}
puts $HTML "<TITLE>$title</TITLE>\n</HEAD>\n\n<BODY bgcolor=\"#A06000\">"
#Write out a heading (here it's the same as the page title)
puts $HTML "<hr>\n<H1 align=center>$title</H1>\n<hr>\n"
#Go to the directory with the pictures in it
cd $filename
#Start table to format page contents
puts $HTML "<div align=center><TABLE><TR>\n"
#Work through a list of all the the jpegs ...
foreach pic [lsort [glob *.\[Jj\]\[Pp\]*\[Gg\]]] {
#get the file size
set size [lindex [exec ls -s $pic] 0]K
#Make corresponding thumbnail if not already present
if {[file exists thumbnails/th_$pic] \
&& [file mtime $pic] < [file mtime thumbnails/th_$pic]} {
puts "$pic -- thumbnail already present"
} else {
puts "Creating thumbnail of $pic"
exec cp $pic thumbnails/th_$pic
exec mogrify -geometry 256x512 thumbnails/th_$pic
}
#Write the html code for each picture
set cap [expr [lsearch $capslist $pic] != -1]
puts $HTML "<TD><A HREF=\"$filename/$pic\">"
puts $HTML "<IMG src=\"$filename/thumbnails/th_$pic\" ALT=\"$pic $size\""
puts $HTML "BORDER=3 WIDTH=256 hspace=10 vspace=6 align=middle></A></TD>"
puts $HTML "<TD align=center valign=middle width=256>"
if $cap {puts $HTML "<H3>$head($pic)</H3>"}
puts $HTML "<H3><A href=\"$filename/$pic\">$pic $size</A></H3>"
if $cap {puts $HTML "<P align=justify>$text($pic)</P></TD>"}
puts $HTML "\n</TR><TR>\n"
}
#End the loop and change back to the directory you came from
cd ..
#Close table
puts $HTML "</TR>\n</TABLE>\n</div>"
#Finally write out the page bottom ...
puts $HTML "<HR>\n<div align=center>"
puts $HTML "<TABLE BORDER=\"0\" WIDTH=\"90%\">"
puts $HTML "<TR>\n<TD WIDTH=\"20%\"><A HREF=\"$url\">home</A></td>"
puts $HTML "<TD WIDTH=\"10%\"></TD>"
puts $HTML "<TD WIDTH=\"40%\" align=center><em>Updated : \
<!-- datestamp:begin -->[exec date "+%e-%b-%Y %R %Z"]<!-- datestamp:end --></em></TD>"
puts $HTML "<TD WIDTH=\"10%\"></TD>"
puts $HTML "<TD WIDTH=\"20%\" align=right>\
<A HREF=\"mailto:$email\">email</A></td>"
#Finish up the html code ...
puts $HTML "</TR>\n</TABLE>\n</div>\n<HR>\n</BODY>\n</HTML>\n"
#And close the file
close $HTML
#End of File