February 4, 2009 | In: Linux, PHP

Image Resize with PHP and ImageMagick Maintaining Proportions

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

1 Response to Image Resize with PHP and ImageMagick Maintaining Proportions

Avatar

avinas

June 18th, 2009 at 2:40 PM

very good

Comment Form