PHP Function : proportional image resizing

function resize_image( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true )
{
	if ( $height <= 0 && $width <= 0 ) return false;

	$info = getimagesize($file);
	$image = '';

	$final_width = 0;
	$final_height = 0;
	list($width_old, $height_old) = $info;

   if ($proportional) {
		   if ($width == 0) $factor = $height/$height_old;
		   elseif ($height == 0) $factor = $width/$width_old;
		   else $factor = min ( $width / $width_old, $height / $height_old);

		   $final_width = round ($width_old * $factor);
		   $final_height = round ($height_old * $factor);
   } else {
		   $final_width = ( $width <= 0 ) ? $width_old : $width;
		   $final_height = ( $height <= 0 ) ? $height_old : $height;
   }

   switch ($info[2]) {
		   case IMAGETYPE_GIF:
				   $image = imagecreatefromgif($file);
		   break;
		   case IMAGETYPE_JPEG:
				   $image = imagecreatefromjpeg($file);
		   break;
		   case IMAGETYPE_PNG:
				   $image = imagecreatefrompng($file);
		   break;
		   default:
				   return false;
   }

   $image_resized = imagecreatetruecolor( $final_width, $final_height );

   if(($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG)) {
		   $trnprt_indx = imagecolortransparent($image);

		   // If we have a specific transparent color
		   if($trnprt_indx >= 0) {

				   // Get the original image's transparent color's RGB values
				   $trnprt_color    = imagecolorsforindex($image, $trnprt_indx);

				   // Allocate the same color in the new image resource
				   $trnprt_indx    = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);

				   // Completely fill the background of the new image with allocated color.
				   imagefill($image_resized, 0, 0, $trnprt_indx);

				   // Set the background color for new image to transparent
				   imagecolortransparent($image_resized, $trnprt_indx);


		   }
		   // Always make a transparent background color for PNGs that don't have one allocated already
		   elseif ($info[2] == IMAGETYPE_PNG) {

				   // Turn off transparency blending (temporarily)
				   imagealphablending($image_resized, false);

				   // Create a new transparent color for image
				   $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);

				   // Completely fill the background of the new image with allocated color.
				   imagefill($image_resized, 0, 0, $color);

				   // Restore transparency blending
				   imagesavealpha($image_resized, true);
		   }
   }

   imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);

   if($delete_original) @unlink($file);

   switch (strtolower($output)) {
		   case 'browser':
				   $mime = image_type_to_mime_type($info[2]);
				   header("Content-type: $mime");
				   $output = NULL;
		   break;
		   case 'file':
				   $output = $file;
		   break;
		   case 'return':
				   return $image_resized;
		   break;
		   default:
		   break;
   }

   switch ($info[2]) {
		   case IMAGETYPE_GIF:
				   imagegif($image_resized, $output);
		   break;
		   case IMAGETYPE_JPEG:
				   imagejpeg($image_resized, $output);
		   break;
		   case IMAGETYPE_PNG:
				   imagepng($image_resized, $output);
		   break;
		   default:
				   return false;
   }

   return true;
}
Processing your request, Please wait....

No Responses to “PHP Function : proportional image resizing”

Comments (Your Comments)

Leave a Reply

You must be logged in to post a comment.