File Coverage

blib/lib/App/StaticImageGallery/Image.pm
Criterion Covered Total %
statement 13 66 19.7
branch 0 20 0.0
condition 0 2 0.0
subroutine 5 15 33.3
pod 9 9 100.0
total 27 112 24.1


line stmt bran cond sub pod time code
1             package App::StaticImageGallery::Image;
2             BEGIN {
3 2     2   38 $App::StaticImageGallery::Image::VERSION = '0.002';
4             }
5              
6 2     2   12 use File::Basename ();
  2         3  
  2         33  
7 2     2   2827 use Imager;
  2         85043  
  2         16  
8 2     2   116 use Carp;
  2         2  
  2         137  
9 2     2   11 use parent 'App::StaticImageGallery::Base::NeedDir';
  2         4  
  2         18  
10              
11             sub init {
12 0     0 1   my $self = shift;
13 0           my %args = @_;
14              
15 0 0         if ( defined $args{original} ) {
16 0           $self->{_original} = $args{original};
17             }else{
18 0           croak "Missing option 'original'";
19             }
20              
21 0           return $self;
22             }
23              
24 0     0 1   sub original { return shift->{_original}; }
25              
26             sub Imager {
27 0     0 1   my $self = shift;
28 0 0         return $self->{_Imager} if defined $self->{_Imager};
29              
30 0           my $file = sprintf("%s/%s",$self->work_dir,$self->original);
31 0           $self->{_Imager} = Imager->new( file => $file );
32              
33 0 0         unless ( $self->{_Imager} ){
34 0           $self->msg_warning("SKIP: %s : %s",$file,$self->{_Imager}->errstr);
35 0           return;
36             }
37              
38 0           return $self->{_Imager};
39             }
40              
41             sub metadata {
42 0     0 1   my $self = shift;
43 0 0         return $self->{_metadata} if defined $self->{_metadata};
44              
45 0           $self->{_metadata} = {};
46 0           foreach my $md ( $self->Imager->tags() ){
47 0           $self->{_metadata}->{ $md->[0] } = $md->[1];
48             }
49              
50 0           return $self->{_metadata};
51             }
52              
53             sub thumbnail {
54 0     0 1   my $self = shift;
55 0 0         return $self->{_thumbnail} if defined $self->{_thumbnail};
56              
57 0           my $thumb = $self->Imager
58             ->scale( xpixels=> 125, ypixels=>125, type=>'max' )
59             ->crop(width=>125, height=>125);
60              
61 0           $self->{_thumbnail} = sprintf("%s.%s.jpg",
62             File::Basename::basename( $self->original ),
63             'thumbnail',
64             );
65              
66 0 0         return $self->{_thumbnail} unless $self->must_create($self->{_thumbnail});
67              
68              
69 0           $self->msg_verbose(2,"Write file %s",$self->{_thumbnail});
70 0 0         unless ( $thumb->write( file => $self->data_dir. '/' .$self->{_thumbnail}, type=>'jpeg' ) ) {
71 0           $self->msg_warning("SKIP thumbnail: %s : %s",$self->{_thumbnail},$thumb->errstr);
72 0           return;
73             }
74              
75 0           return $self->{_thumbnail};
76             }
77              
78 0     0 1   sub small { return shift->_scale('small', xpixels => 256 ); }
79 0     0 1   sub medium { return shift->_scale('medium', xpixels => 512 ); }
80 0     0 1   sub large { return shift->_scale('large', xpixels => 1024 ); }
81              
82             sub _scale{
83 0     0     my ($self, $infix, @scale_options) = @_;
84              
85 0           my $image = $self->Imager->scale( @scale_options );
86 0           my $filename = sprintf("%s.%s.jpg",
87             File::Basename::basename( $self->original ),
88             $infix,
89             );
90 0 0         return $filename unless $self->must_create($filename);
91              
92 0           $self->msg_verbose(2,"Write file %s",$filename);
93              
94 0 0         unless ( $image->write( file => $self->data_dir . '/' . $filename ) ) {
95 0           $self->msg_warning("SKIP: %s : %s",$filename,$image->errstr);
96 0           return;
97             }
98 0           return $filename;
99             }
100              
101             sub must_create {
102 0     0 1   my ($self,$filename) = @_;
103 0           my $original = sprintf("%s/%s",$self->work_dir,$self->original);
104 0           my $new = sprintf("%s/%s",$self->data_dir,$filename);
105              
106 0           my $mtime_original = (stat($original))[9];
107 0   0       my $mtime_new = (stat($new))[9] || 0;
108              
109 0 0         if ( $mtime_new > $mtime_original ){
110 0           $self->msg_verbose(6,"must_create:FALSE Original:%s:%d New:%s:%d",
111             $original,
112             $mtime_original,
113             $new,
114             $mtime_new,
115             );
116 0           return 0;
117             }
118 0           $self->msg_verbose(6,"must_create:TRUE Original:%s:%d New:%s:%d",
119             $original,
120             $mtime_original,
121             $new,
122             $mtime_new,
123             );
124 0           return 1;
125             }
126              
127             1;
128             __END__
129              
130             =head1 NAME
131              
132             App::StaticImageGallery::Image - Handles a image
133              
134             =head1 VERSION
135              
136             version 0.002
137              
138             =head1 DESCRIPTION
139              
140             =head1 SYNOPSIS
141              
142             =head1 METHODS
143              
144             =head2 Imager
145              
146             =head2 init
147              
148             =head2 large
149              
150             =head2 medium
151              
152             =head2 metadata
153              
154             =head2 original
155              
156             =head2 small
157              
158             =head2 thumbnail
159              
160             =head2 must_create
161              
162             =over 4
163              
164             =item Arguments: $filename
165              
166             =item Return value: Bool [0|1]
167              
168             =back
169              
170             Compare $filename with the original file. If the original file newer then
171             $filenamen in the data dir then return 1.
172              
173             =head1 AUTHOR
174              
175             See L<App::StaticImageGallery/AUTHOR> and L<App::StaticImageGallery/CONTRIBUTORS>.
176              
177             =head1 COPYRIGHT & LICENSE
178              
179             =cut