NAME

CGI::Application::Plugin::Thumbnail - have a runmode that makes thumbnails

DESCRIPTION

These methods allow your cgi app to have a runmmode that makes a thumbnail

SYNOPSIS

   use CGI::Application::Plugin::Thumbnail ':all';
   use CGI::Application::Plugin::Stream 'stream_file';


   sub thumbnail : Runmode {
	   my $self = shift;

      # was an original image requested, and did it exist on disk?
      $self->get_abs_image('rel_path') or return;
         
      # get the corresponding abs pathto the thumbnail, create if not exists
      $self->abs_thumbnail or return;
      
      # stream the thumbnail image
      $self->stream_file( $self->abs_thumbnail ) 
         or warn("cant stream");
         
      return;
   }

METHODS

get_abs_image()

optional argument is what query string param will hold the relative path to the image we want to make a thumb for. if none specified, uses 'rel_path' returns boolean, if it found something or not. calling this method is optional

$self->get_abs_image('rel_path');   

set_abs_image()

optional argument is absolute path to original image if none provided, will resolve with get_rel_path() calling this method is optional

$self->set_abs_image('/home/myself/images/image1.jpg');   

abs_image()

returns absolute path to image we want to make a thumb of if you set via set_abs_image() or specified query param via get_abs_image() , will mirror this. you will likely call this method in your thumbnail runmode

$self->abs_image or warn("you did not ask for an image or that image does not exist");

abs_thumbnail()

returns absolute path to thumbnail if it did not exist, we would try to make it, if we could not make it, returns undef and warns this is the minimum method you need to call, to stream the image

$self->abs_thumbnail or warn("no thumbnail was made or no image requested");

CHANGING THUMBNAIL BEFORE SAVING

What if you want to provide your own funky style to the thumbnail before saving??

then override __thumbnail_style()

Example:

   use CGI::Application::Plugin::Thumbnail;
   use CGI::Application::Plugin::Stream;


   sub __thumbnail_style {
      my ($self,$thumb) = @_;
      
      $thumb->Quantize( colorspace => 'gray' ); 
		$thumb->Set( compression => '8' );
      return 1;   
   }




   sub thumbnail : Runmode {
	   my $self = shift;
      $self->get_abs_image('rel_path') or return;   
      
      $self->abs_thumbnail or return;  
   
      $self->stream_file( $self->abs_thumbnail ) 
         or warn("thumbnail runmode: could not stream thumb ".$self->abs_thumbnail);
      return;
   }

__thumbnail_style()

Does nothing. You can override this to change your thumbnail it is called when a thumbnail is creted, *after* the original is resized, but *before* it is saved. receives $thumb image magick object. You do not need to return the object. See "CHANGING THUMBNAIL BEFORE SAVING"

PARAMS TO CONSTRUCTOR

new My::Cgiapp(
   PARAMS => {       
      thumbnail_rel_dir => '.thumbnails',                  
      thumbnail_restriction => '100x100',
   },   
);

You do not have to provide parameters. Defaults are provided.

WHAT PICTURE?

What you tell the runmode thumbnail is not what thumbnail you want, but what original picture you want a thumbnail *of*.

The way you tell it is via the query string, if you want a thumbnail of /home/me/public_html/img/one.jpg, then the query string would read one of these:

?rm=thumbnail&rel_path=img/one.jpg
?rm=thumbnail&rel_path=/img/one.jpg

THUMBNAIL DOCROOT

You can define where the thumbnails are stored via parameter to constructor. We attempt to create if not there.

new My::Cgiapp(
   PARAMS => { 
      thumbnail_rel_dir => '/.thumbnails' },
);

Default is shown above.

THUMBNAIL RESTRICTION, DIMENSIONS

We define dimensions as maximum width and maximum height. If you do not define dimensions, default is 100x100. You may also defined dimmensions via the query string:

?rm=thumbnail&rel_path=img/one.jpg&thumbnail_restriction=100x100

We store thumbs by dimension for example these are requests and their destinations Keep in mind that if the thumbnail dimensions are larger then the image, no thumbnail is made, the original is streamed back.

?rm=thumbnail&rel_path=img/one.jpg
DOCUMENT_ROOT/.thumbnails/100x100/img/one.jpg

?rm=thumbnail&rel_path=img/one.jpg&thumbnail_restriction=100x100
DOCUMENT_ROOT/.thumbnails/100x100/img/one.jpg

?rm=thumbnail&rel_path=img/one.jpg&thumbnail_restriction=600x600
DOCUMENT_ROOT/.thumbnails/600x600/img/one.jpg

AUTHOR

Leo Charre