<?php  function smart_resize_image( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false )
        {
            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 ) {
                if ( $use_linux_commands )
                    exec('rm '.$file);
                else
                    @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;
        }