package Image::GD::Thumbnail; our $VERSION = '0.041'; use Carp; use strict; use warnings; =head1 NAME Image::GD::Thumbnail - produce thumbnail images with GD =head1 SYNOPSIS use GD; use Image::GD::Thumbnail; # Load your source image open IN, 'E:/Images/test.jpg' or die "Could not open."; my $srcImage = GD::Image->newFromJpeg(*IN); close IN; # Create the thumbnail from it, where the biggest side is 50 px my ($thumb,$x,$y) = Image::GD::Thumbnail::create($srcImage,50); # Save your thumbnail open OUT, ">E:/Images/thumb_test.jpg" or die "Could not save "; binmode OUT; print OUT $thumb->jpeg; close OUT; __END__ =head1 DESCRIPTION This module uses the GD library to create a thumbnail image with no side bigger than you specify. The subroutine C takes two arguments: the first is a GD image object, the second is the size, in pixels, you wish the image's longest side to be. It returns a new GD image object (the thumbnail), as well as the I and I dimensions, as (integer) scalars. =head1 PREREQUISITES GD =cut sub create { my ($orig,$max) = (shift,shift); confess "No image supplied" unless $orig; confess "No scale factor or geometry" unless $max; my ($ox,$oy) = $orig->getBounds(); my ($maxx, $maxy); if (($maxx, $maxy) = $max =~ /^(\d+)x(\d+)$/i){ $max = ($ox>$oy)? $maxx : $maxy; } else { $maxx = $maxy = $max; } # my $r = ($ox>$oy) ? ($ox/$maxx) : ($oy/$maxy); my $r = ($ox/$maxx) > ($oy/$maxy) ? ($ox/$maxx) : ($oy/$maxy); my $thumb = GD::Image->new($ox/$r,$oy/$r); $thumb->copyResized($orig,0,0,0,0,$ox/$r,$oy/$r,$ox,$oy); return $thumb, sprintf("%.0f",$ox/$r), sprintf("%.0f",$oy/$r); } 1; __END__ =head2 EXPORT None by default. =head1 AUTHOR Lee Goddard =head1 SEE ALSO L, L. =head1 COPYRIGHT Copyright (C) Lee Godadrd 2001 ff, all rights reserved. Available under the same terms as Perl itself. =cut __END__