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/