use strict; use File::Find; use Imager; use Image::Seek qw(loaddb add_image query_id savedb); use Storable qw/nfreeze thaw/; my $folder = $ARGV[0] || './'; my $namehash = {}; my $id = 1; my $namedb = 'imgname.db'; my $imgdb = 'imgseek.db'; if ( -e $namedb ) { open my $fh, '<', $namedb || die; my $fzdata = do { local $/; <$fh> }; close $fh; $namehash = thaw($fzdata); $id = $namehash->{_maxid}; } loaddb($imgdb); my $img = Imager->new(); find( \&filter, $folder ); $namehash->{_maxid} = $id - 1; savedb($imgdb); open my $fh, '>', $namedb or die; print $fh nfreeze($namehash); close $fh; sub filter { eval { if ( $File::Find::name =~ /jpg$/ && $File::Find::name !~ /thumb/ && !defined $namehash->{_name}->{$File::Find::name} ) { $img->open( file => $File::Find::name ); add_image( $img, $id ); $namehash->{_id}->{$id} = $File::Find::name; $namehash->{_name}->{$File::Find::name} = $id; print "[$id]$File::Find::name\n"; $id++; } }; if($@) { warn $@; } }