Sign up to create your own snipts, or login.

Public snipts » evansims's snipts » Proportional image resizing

posted on Dec 20, 2008 at 7:39 p.m. EST in 
  • 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;
    }
    

    copy | embed

0 Comments

Sign up, or login to leave a comment.