It sounds like you are working with a CGI, you could just paginate them. For example build a list, then display so many per page.
use strict;
use warnings;
use CGI;
use constant PICS_PER_PAGE => 20;
my @pics = ('pic1.jpg', 'pic2.jpg');
my $cgi = new CGI;
my $start = $cgi->param('start') || 0;
foreach($start..($start + PICS_PER_PAGE - 1)){
last unless(defined $pics[$_]);
print qq(<IMG src="$pics[$_]">);
}
my $newstart = $start + PICS_PER_PAGE;
print qq(<INPUT type="hidden" name="start" value="$newstart">);
Replace PICS_PER_PAGE with the number of pictures per page, and load @pics, with the picture names.
You can't really check to see if the browser has already loaded the images, but you can generate JavaScript to only preload the images that are going to be displayed on this particular page. You already have the list of images that are going to be displayed on the current page.
Update:Took care of default case, where $start was undef.
Update2:Gave more explanation. I read the question too quick, and didn't answer all of it.