Image Resize with PHP and ImageMagick Maintaining Proportions

4
Feb
1

There are many examples found on the web on resizing images using PHP while maintaining aspect ratio. However most of them are based on a single maximum dimension i.e. should not exceed a certain size with on either height or width.

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;
}

Enjoy this article?

Consider subscribing to our RSS feed!

1 Comment

  1. avinas
    2:40 PM on June 18th, 2009

    very good

Leave a comment

RSS feed for comments on this post