I have written the code below that will accept a desired height and width and downsize the source image without exceeding either $maxheight or $maxwidth but still maintain proportions.
Adjust your path to ImageMagick accordingly (/usr/bin/convert)
function resizeimage($source,$dest,
$maxwidth = 200,$maxheight = 160)
{
list($width,$height) = getimagesize($source);
/**
* We need to get both ratios so we can
* find which reduced height and width
* will fix the max allowed dimensions.
*/
$hRatio = $maxheight / $height;
$wRatio = $maxwidth / $width;
/**
* Test Dimensions based on height reduction ratio.
*/
$tHeightHR = $maxheight;
$tWidthHR = ceil($hRatio * $width);
/**
* Test dimenstions based on width reduction ratio.
*/
$tWidthWR = $maxwidth;
$tHeightWR = ceil($wRatio * $height);
if($width < $maxwidth AND $height < $maxheight)
{
echo 'Source already below maximum dimensions: '
. $source . " {$width}x{$height}\n";
return false;
}
if($tWidthHR <= $maxwidth) {
$height = $tHeightHR; $width = $tWidthHR;
}
if($tHeightWR <= $maxheight) {
$height = $tHeightWR; $width = $tWidthWR;
}
$cmd = "/usr/bin/convert -resize {$width}x{$height} "
. "\"{$source}\" \"{$dest}\" 2>&1";
@exec($cmd,$output,$retvar);
if($retvar != 0)
{
echo implode(" -- ",$output);
return false;
}
return true;
}
REFERENCES
http://www.lampadmins.com/f17/image-resize-php-imagemagick-maintaining-proportions-14/
http://www.imagemagick.org/Usage/resize/
