- my ($xpix,$ypix)=( $opts{xpixels}/$self->getwidth() , $opts{ypixels}/$self->getheight() );
- if ($opts{'type'} eq 'min') { $opts{scalefactor}=min($xpix,$ypix); }
- if ($opts{'type'} eq 'max') { $opts{scalefactor}=max($xpix,$ypix); }
- } elsif ($opts{xpixels}) { $opts{scalefactor}=$opts{xpixels}/$self->getwidth(); }
- elsif ($opts{ypixels}) { $opts{scalefactor}=$opts{ypixels}/$self->getheight(); }
+ my ($xpix, $ypix)=( $opts{xpixels} / $self->getwidth() ,
+ $opts{ypixels} / $self->getheight() );
+ if ($opts{'type'} eq 'min') {
+ $scalefactor = min($xpix,$ypix);
+ }
+ elsif ($opts{'type'} eq 'max') {
+ $scalefactor = max($xpix,$ypix);
+ }
+ else {
+ $self->_set_error('invalid value for type parameter');
+ return undef;
+ }
+ } elsif ($opts{xpixels}) {
+ $scalefactor = $opts{xpixels} / $self->getwidth();
+ }
+ elsif ($opts{ypixels}) {
+ $scalefactor = $opts{ypixels}/$self->getheight();
+ }
+ elsif ($opts{constrain} && ref $opts{constrain}
+ && $opts{constrain}->can('constrain')) {
+ # we've been passed an Image::Math::Constrain object or something
+ # that looks like one
+ (undef, undef, $scalefactor)
+ = $opts{constrain}->constrain($self->getwidth, $self->getheight);
+ unless ($scalefactor) {
+ $self->_set_error('constrain method failed on constrain parameter');
+ return undef;
+ }
+ }