App-StaticImageGallery

 view release on metacpan or  search on metacpan

lib/App/StaticImageGallery/Image.pm  view on Meta::CPAN

    foreach my $md ( $self->Imager->tags() ){
        $self->{_metadata}->{ $md->[0] } = $md->[1];
    }

    return $self->{_metadata};
}

sub thumbnail {
    my $self = shift;
    return $self->{_thumbnail} if defined $self->{_thumbnail};

    my $thumb = $self->Imager
      ->scale( xpixels=> 125, ypixels=>125, type=>'max' )
      ->crop(width=>125, height=>125);

    $self->{_thumbnail} =   sprintf("%s.%s.jpg",
          File::Basename::basename( $self->original ),
          'thumbnail',
      );

    return $self->{_thumbnail} unless $self->must_create($self->{_thumbnail});


    $self->msg_verbose(2,"Write file %s",$self->{_thumbnail});
    unless ( $thumb->write( file => $self->data_dir. '/' .$self->{_thumbnail}, type=>'jpeg' ) ) {
        $self->msg_warning("SKIP thumbnail: %s : %s",$self->{_thumbnail},$thumb->errstr);
        return;
    }

    return $self->{_thumbnail};
}

sub small { return shift->_scale('small', xpixels => 256 ); }
sub medium { return shift->_scale('medium', xpixels => 512 ); }
sub large { return shift->_scale('large', xpixels => 1024 ); }

sub _scale{
    my ($self, $infix, @scale_options) = @_;

    my $image = $self->Imager->scale( @scale_options );
    my $filename = sprintf("%s.%s.jpg",
        File::Basename::basename( $self->original ),
        $infix,
    );
    return $filename unless $self->must_create($filename);

    $self->msg_verbose(2,"Write file %s",$filename);

    unless ( $image->write( file => $self->data_dir . '/' . $filename ) ) {
        $self->msg_warning("SKIP: %s : %s",$filename,$image->errstr);
        return;
    }
    return $filename;
}

sub must_create {
    my ($self,$filename) = @_;
    my $original = sprintf("%s/%s",$self->work_dir,$self->original);
    my $new = sprintf("%s/%s",$self->data_dir,$filename);

    my $mtime_original = (stat($original))[9];
    my $mtime_new = (stat($new))[9] || 0;

    if ( $mtime_new > $mtime_original ){
        $self->msg_verbose(6,"must_create:FALSE Original:%s:%d New:%s:%d",
          $original,
          $mtime_original,
          $new,
          $mtime_new,
        );
        return 0;
    }
    $self->msg_verbose(6,"must_create:TRUE Original:%s:%d New:%s:%d",
      $original,
      $mtime_original,
      $new,
      $mtime_new,
    );
    return 1;
}

1;
__END__

=head1 NAME

App::StaticImageGallery::Image - Handles a image

=head1 VERSION

version 0.002

=head1 DESCRIPTION

=head1 SYNOPSIS

=head1 METHODS

=head2 Imager

=head2 init

=head2 large

=head2 medium

=head2 metadata

=head2 original

=head2 small

=head2 thumbnail

=head2 must_create

=over 4

=item Arguments: $filename

=item Return value: Bool [0|1]



( run in 1.202 second using v1.01-cache-2.11-cpan-39bf76dae61 )