public static function SetLogfile($Logfile)
 {
     if (!defined('RD_LOG')) {
         self::$Logfile = $Logfile;
     }
     return;
 }
 function smart_resize_image($file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = false)
 {
     $old = RD_Debug::$ShowError;
     RD_Debug::$ShowError = false;
     $info = getimagesize($file);
     RD_Debug::$ShowError = $old;
     if (!$info) {
         return false;
     }
     $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);
         } elseif ($info[2] == IMAGETYPE_PNG) {
             // Always make a transparent background color for PNGs that don't have one allocated already
             // 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;
 }