File Coverage

blib/lib/Apache/Image.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             package Apache::Image;
2 1     1   25617 use warnings;
  1         3  
  1         32  
3 1     1   5 use strict;
  1         2  
  1         32  
4 1     1   441 use Apache2::RequestRec ();
  0            
  0            
5             use Apache2::RequestIO ();
6             use Apache2::Const -compile => qw(OK NOT_FOUND HTTP_MOVED_TEMPORARILY);
7             use Apache2::TrapSubRequest;
8              
9             # XXX - Bug with getting uri/path_info
10             # If /z/image exists it works
11             # If /z/image does not, it is all broken
12             # If /z/image/thubnail exists it drops the first part of path info !
13             # all bad
14              
15             # XXX We should use Image::Thumbnail !!!
16             use Image::Magick;
17              
18             use Carp;
19             use version; our $VERSION = qv('0.0.4');
20              
21             # TODO Can this be made to be Apaceh 1.3 (mod_perl 1) ? If not document the reason
22              
23             sub handler {
24             my $r = shift;
25              
26             # URI (original) & Configuration
27             my $uri=$r->path_info;
28              
29             # Get the size from config
30             my $MaxSize=$r->dir_config("ImageMaxSize") || 50;
31              
32             # Force this size? Or only resize if larger?
33             my $Force=$r->dir_config("ImageForce") || 0;
34              
35             # Get our image from Apache
36             my $image;
37             my $subr = $r->lookup_uri($uri);
38             # XXX Do other things like POST data etc.
39             $subr->args($r->args);
40             $subr->run_trapped(\$image);
41            
42             # XXX Check not found or other error
43             # XXX Check the Pragma and Expiry times for caching and setting local expiry times
44              
45             # Check mime type is image (else return based on mime type)
46             if ($subr->content_type !~ m|^image/([^\s]+)|) {
47             # print STDERR "Not a valid type for $rest " . $subr->content_type . "\n";
48             # XXX Get this from configuration
49             $r->internal_redirect("/z/resource/thumbnail/unknown.jpg");
50             # TODO Support mime type mapping to files (can we use Apache for this?)
51             # TODO Future - Support creation of Thumbnails from other sources
52             return Apache2::Const::OK;
53             }
54              
55             # XXX Caching - Write entries to a directory and use internal redirect
56             # to get them - only problem may be that a tif wants to be a jpg
57             # thumbnail
58             # $r->internal_redirect("/unknown.jpg");
59              
60             # Process the image into a thumbnail and output
61             my $im = Image::Magick->new;
62             $im->BlobToImage($image);
63              
64             # Resize if Force or Too big !
65             if ($Force || ($im->Get('width') > $MaxSize) || ($im->Get('height') > $MaxSize)) {
66             $im->Scale(geometry => $MaxSize . 'x' . $MaxSize);
67             }
68              
69             # XXX Is it always ?
70             $r->content_type('image/jpg');
71             $r->rflush();
72             print $im->ImageToBlob();
73            
74             # XXX Save to cache (files to redirect to) (internal Apache caching)
75            
76             return Apache2::Const::OK;
77             }
78              
79              
80             1; # Magic true value required at end of module
81             __END__