The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Net::DPAP::Server::Image;
use strict;
use warnings;
use base qw( Class::Accessor::Fast );
use File::Basename qw( basename );
use Image::Info;
use Image::Imlib2;
use Perl6::Slurp;
use File::Temp;

__PACKAGE__->mk_accessors(qw(
      file
      dmap_itemid dmap_itemname dmap_itemkind dmap_containeritemid

      dpap_imagefilename dpap_aspectratio dpap_imagefilesize dpap_creationdate
));

sub new_from_file {
    my $class = shift;
    my $file = shift;
    my $self = $class->new({ file => $file });
    #print "Adding $file\n";

    my @stat = stat $file;
    my $info = Image::Info::image_info( $file );
    $self->file( $file );
    $self->dmap_itemid( $stat[1] ); # the inode should be good enough
    $self->dmap_containeritemid( 0+$self );

    $self->dpap_imagefilename( basename $file );
    $self->dpap_aspectratio( $info->{width} / $info->{height} );
    $self->dpap_imagefilesize( $stat[7] );
    $self->dpap_creationdate( $stat[10] );
    $self->dmap_itemname( basename $file, qw( .jpeg .jpg ) );
    $self->dmap_itemkind( 3 );

    return $self;
}

sub dpap_hires {
    my $self = shift;
    scalar slurp $self->file;
}

sub dpap_thumb {
    my $self = shift;
    my $image = Image::Imlib2->load( $self->file );
    my $thumbnail = $image->create_scaled_image( 240, 0 );
    $thumbnail->image_set_format("jpeg");
    my $file = File::Temp->new;
    $thumbnail->save( $file->filename );
    return scalar slurp $file->filename;
}


1;