Модернизация функции рейсайза картинок

Как понадобилось изменять размер картинок столкнулся с тем, что стандартная функция func_img_resize изменяла размер только когда указана $iWidthDest и то как-то «косячно» на мой взгляд… в общем решил я функцию переделать… сделал независимый расайз по высоте и ширине теперь если надо картинку вписать в прямоугольник то просто задаёшь $iWidthDest и $iHeightDest… а ели просто надо подогнать по высоте или ширине задаёшь только то, что надо! всё просто и работает!!! =)
может кому пригодиться…
/**
 * Рейсайзинг картинок
 *
 * @param unknown_type $sFileSrc
 * @param unknown_type $sDirDest
 * @param unknown_type $sFileDest
 * @param unknown_type $iWidthMax
 * @param unknown_type $iHeightMax
 * @param unknown_type $iWidthDest
 * @param unknown_type $iHeightDest
 * @param unknown_type $bForcedMinSize
 * @return unknown
 */
function func_img_resize($sFileSrc,$sDirDest,$sFileDest,$iWidthMax,$iHeightMax,$iWidthDest=null,$iHeightDest=null,$bForcedMinSize=true) {
	if (!($aSize=getimagesize($sFileSrc))) {		
		return false;
	}	
	$img_src=false;
	switch ($aSize['mime']) {
		case 'image/png':
			$img_src=imagecreatefrompng($sFileSrc);
			$sFileDest.='.png';
			break;
		case 'image/gif':
			$img_src=imagecreatefromgif($sFileSrc);
			$sFileDest.='.gif';
			break;
		case 'image/jpeg':
			$img_src=imagecreatefromjpeg($sFileSrc);
			$sFileDest.='.jpg';
			break;
		default:
			return false;
			break;
	}
	if (!$img_src) {		
		return false;
	}
	$iWidthNew=$aSize[0];
	$iHeightNew=$aSize[1];
	if (($iWidthNew>$iWidthMax) or ($iHeightNew>$iHeightMax)) {
		return false;
	}
	if ($iWidthDest) {
		if (!$bForcedMinSize and ($iWidthDest>$iWidthNew)) {
			$iWidthDest=$iWidthNew;
		}
		$iSizeRelation=$iWidthDest/$iWidthNew;	
		$iWidthNew=$iWidthDest;		
		$iHeightNew=round($iSizeRelation*$iHeightNew);
	}
	if ($iHeightDest) {
		if (!$bForcedMinSize and ($iHeightDest>$iHeightNew)) {
			$iHeightDest=$iHeightNew;
		}
		$iSizeRelation=$iHeightDest/$iHeightNew;
		$iHeightNew=$iHeightDest;			
		$iWidthNew=round($iSizeRelation*$iWidthNew);
	}
	
	
	$sFileFullPath=DIR_SERVER_ROOT.'/'.$sDirDest.'/'.$sFileDest;
	@func_mkdir(DIR_SERVER_ROOT,$sDirDest);
	if (($iWidthDest and $iWidthDest!=$aSize[0])or($iHeightDest and $iHeightDest!=$aSize[1])) {
		$img_dest=imagecreatetruecolor($iWidthNew,$iHeightNew);		
		imagesavealpha($img_dest,true);
		imagealphablending($img_dest,false);
		if (imagecopyresampled($img_dest,$img_src,0,0,0,0,$iWidthNew,$iHeightNew,$aSize[0],$aSize[1])) {				
			imagedestroy($img_src);
			switch ($aSize['mime']) {
				case 'image/png':
					if (imagepng($img_dest,$sFileFullPath)) {
						chmod($sFileFullPath,0666);
						return $sFileDest;
					}
					break;
				case 'image/gif':
					if (imagegif($img_dest,$sFileFullPath)) {
						chmod($sFileFullPath,0666);
						return $sFileDest;
					}
					break;
				case 'image/jpeg':
					if (imagejpeg($img_dest,$sFileFullPath)) {
						chmod($sFileFullPath,0666);
						return $sFileDest;
					}
					break;
			}
		}
	} else {
		if (copy($sFileSrc,$sFileFullPath)) {
			return $sFileDest;
		}
	}
	return false;
}