This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.
To: Rufus.Cable@icollector.com From: Stas Bekman <stas@stason.org> Subject: Re: RFC: Apache::Thumbnail - Generate image thumbnails on the fly Date: Fri, 8 Dec 2000 18:13:29 +0100 (CET) On Fri, 8 Dec 2000 Rufus.Cable@icollector.com wrote: > Hi - > > Attached is an Apache module to automatically generate & cache thumbnail > images. It uses Image::Magick (http://www.simplesystems.org/ImageMagick/) > and File::Path (CPAN) and runs quickly enough to be useful on my > Apache/mod_perl machine. It's my first proper handler, so let me know if > there are any glaring ommissions or bugs! :) > > Otherwise, if it's of use to anyone else, should I package this up and > submit it to CPAN as v1.0? Comments welcome! Check out these two first: cpan> i /Apache::Album/ Module id = Apache::Album CPAN_USERID WOODY (Jim Woodgate <woody@bga.com>) CPAN_VERSION 0.94 CPAN_FILE W/WO/WOODY/Apache-Album-0.94.tar.gz INST_FILE (not installed) cpan> i /Apache::Magick/ Module id = Apache::Magick DESCRIPTION Image conversion on-the-fly CPAN_USERID MPB (mod_perl book (Doug and Lincoln) <book@modperl.com>) CPAN_VERSION undef CPAN_FILE Contact Author mod_perl book (Doug and Lincoln) <book@modperl.com> DSLI_STATUS bdpf (beta,developer,perl,functions) INST_FILE (not installed) === To: modperl@apache.org From: Rufus.Cable@icollector.com Subject: RFC: Apache::Thumbnail - Generate image thumbnails on the fly Date: Fri, 8 Dec 2000 17:10:57 -0000 ------_=_NextPart_000_01C06139.D4D96120 Content-Type: text/plain; charset="iso-8859-1" Hi - Attached is an Apache module to automatically generate & cache thumbnail images. It uses Image::Magick (http://www.simplesystems.org/ImageMagick/) and File::Path (CPAN) and runs quickly enough to be useful on my Apache/mod_perl machine. It's my first proper handler, so let me know if there are any glaring ommissions or bugs! :) Otherwise, if it's of use to anyone else, should I package this up and submit it to CPAN as v1.0? Comments welcome! Rufus. ------_=_NextPart_000_01C06139.D4D96120 Content-Type: application/octet-stream; name="Thumbnail.pm" Content-Disposition: attachment; filename="Thumbnail.pm" package Apache::Thumbnail; use Apache::Constants qw(:common); use Image::Magick (); use File::Path (); use strict; use vars qw($VERSION); $VERSION = '0.5'; sub handler { my $r = shift; my $root = $r->document_root(); my $dest = $r->dir_config('Thumbnail_Directory') || '/thumbnails'; my $geom = $r->dir_config('Thumbnail_Geometry') || '100x100'; my $img = $r->filename().$r->path_info(); $img =~ s/^$root\/[^\/]+//; # get thumbnail name my $thumb = $img; # final filenames my $srcFile = "$root$img"; my $destFile = "$root$dest$thumb"; # already cached? if (-f $destFile and -r _) { if (-C _ < -C $srcFile) { $r->internal_redirect("$dest$thumb"); return OK; } } # is source image there? if (-s "$srcFile") { # yes, create thumbnail my $e; my $i = new Image::Magick; # read source $e = $i->Read("$srcFile"); if ($e) { $r->log_error("Couldn't read '$srcFile': $e"); return SERVER_ERROR; } # scale it $e = $i->Scale(geometry => $geom); if ($e) { $r->log_error("Couldn't scale '$srcFile': $e"); return SERVER_ERROR; } # check directory tree is in place... my $path = $destFile; $path =~ s/\/[^\/]+$//o; if (!-d $path) { File::Path::mkpath $path || ($r->log_error("Couldn't create directory '$path': $!") && return SERVER_ERROR); } # write thumbnail $e = $i->Write($destFile); if ($e) { $r->log_error("Couldn't write '$destFile': $e"); return SERVER_ERROR; } # and send to browser $r->internal_redirect("$dest$thumb"); return OK; } # couldn't find source image return NOT_FOUND; } 1; __END__ =head1 NAME Apache::Thumbnail - Generate image thumbnails on the fly =head1 SYNOPSIS # in httpd.conf or similar <Location /thumbs/> SetHandler perl-script PerlSetVar Thumbnail_Directory "/thumbnails" PerlSetVar Thumbnail_Geometry "100x100" PerlHandler Apache::Thumbnail order allow,deny allow from all </Location> <Location /smallpics/> SetHandler perl-script PerlSetVar Thumbnail_Directory "/smallpics/" PerlSetVar Thumbnail_Geometry "200x200" PerlHandler Apache::Thumbnail order allow,deny allow from all </Location> =head1 DESCRIPTION This module automatically generates thumbnail images on the fly, caching them in the specified thumbnail directory in a tree structure matching that of the source images. To use, set up a C<<Location>> directive as above. For any image on the web server, a corresponding thumbnail is available by prepending that location to the path - eg. Image at /images/staff/john.jpg Thumbnail at /thumbs/images/staff/john.jpg That's it! The first time a thumbnail is requested, it'll be generated and cached; subsequent requests will return the cached image immediately. If the source image is newer than the thumbnail, the thumbnail will automatically be regenerated. =head1 OPTIONS =over 4 =item Thumbnail_Directory The directory in which the finished thumbnails are cached, relative to the webserver document root. If unspecified, the default is C</thumbnails>. PerlSetVar Thumbnail_Directory "/thumbnails" =item Thumbnail_Geometry The maximum size of the thumbnail images. The proportions always remain unchanged - see C<Image::Magick::Scale()> for details. If unspecified, the default is 100x100 pixels. PerlSetVar Thumbnail_Geometry "100x100" =back 4 =head1 BUGS Doesn't currently check if the source image is smaller than the thumbnail size, so tiny images would look nasty scaled up. Could add this, but it'd be slightly slower, and probably not all that useful? Another other bugs or suggestions, let me know! =head1 PREREQUISITES =item * mod_perl L<http://perl.apache.org/> =item * Image::Magick L<http://www.simplesystems.org/ImageMagick/> =head1 AUTHOR Rufus Cable ruf@rcable.co.uk =cut ===