Example #1
0
 function createThumbnail($path, $config, $width, $height, $image_bg, $image_stretch, $quality)
 {
     if (GKIS_Bluap_Image::checkCache(GKIS_Bluap_Image::translateName($path, $config['module_id']), $config['last_modification'], $config['module_id'])) {
         return TRUE;
     } else {
         // importing classes
         jimport('joomla.filesystem.file');
         jimport('joomla.filesystem.folder');
         jimport('joomla.filesystem.path');
         //script configuration - increase memory limit to 64MB
         ini_set('memory_limit', '64M');
         // cache dir
         $cache_dir = JPATH_ROOT . DS . 'modules' . DS . 'mod_image_show_gk4' . DS . 'cache' . DS;
         // file path
         $file = GKIS_Bluap_Image::getRealPath($path);
         // filename
         $filename = GKIS_Bluap_Image::translateName($path, $config['module_id']);
         // Getting informations about image
         if (is_file($file)) {
             $imageData = getimagesize($file);
             // loading image depends from type of image
             if ($imageData['mime'] == 'image/jpeg' || $imageData['mime'] == 'image/pjpeg' || $imageData['mime'] == 'image/jpg') {
                 $imageSource = @imagecreatefromjpeg($file);
             } elseif ($imageData['mime'] == 'image/gif') {
                 $imageSource = @imagecreatefromgif($file);
             } else {
                 $imageSource = @imagecreatefrompng($file);
             }
             // here can be exist an error when image is to big - then class return blank page
             // setting image size in variables
             $imageSourceWidth = imagesx($imageSource);
             $imageSourceHeight = imagesy($imageSource);
             // Creating blank canvas
             $imageBG = imagecreatetruecolor($width, $height);
             // If image is JPG or GIF
             if ($imageData['mime'] == 'image/jpeg' || $imageData['mime'] == 'image/pjpeg' || $imageData['mime'] == 'image/jpg' || $imageData['mime'] == 'image/gif') {
                 // when bg is set to transparent - use black background
                 if ($image_bg == 'transparent') {
                     $bgColorR = 0;
                     $bgColorG = 0;
                     $bgColorB = 0;
                 } else {
                     // in other situation - translate hex to RGB
                     $bg = $image_bg;
                     if (strlen($bg) == 4) {
                         $bg = $bg[0] . $bg[1] . $bg[1] . $bg[2] . $bg[2] . $bg[3] . $bg[3];
                     }
                     $hex_color = strtolower(trim($bg, '#;&Hh'));
                     $bg = array_map('hexdec', explode('.', wordwrap($hex_color, ceil(strlen($hex_color) / 3), '.', 1)));
                     $bgColorR = $bg[0];
                     $bgColorG = $bg[1];
                     $bgColorB = $bg[2];
                 }
                 // Creating color
                 $rgb = imagecolorallocate($imageBG, $bgColorR, $bgColorG, $bgColorB);
                 // filling canvas with new color
                 imagefill($imageBG, 0, 0, $rgb);
             } else {
                 // for PNG images
                 $imageBG = imagecreatetruecolor($width, $height);
                 // enable transparent background
                 if ($image_bg == 'transparent') {
                     // create transparent color
                     $rgb = imagecolorallocatealpha($imageBG, 0, 0, 0, 127);
                 } else {
                     // create normal color
                     $bg = $image_bg;
                     // translate hex to RGB
                     $hex_color = strtolower(trim($bg, '#;&Hh'));
                     $bg = array_map('hexdec', explode('.', wordwrap($hex_color, ceil(strlen($hex_color) / 3), '.', 1)));
                     // creating color
                     $rgb = imagecolorallocate($imageBG, $bg[0], $bg[1], $bg[2]);
                 }
                 // filling the canvas
                 imagefill($imageBG, 0, 0, $rgb);
                 // enabling transparent settings for better quality
                 imagealphablending($imageBG, false);
                 imagesavealpha($imageBG, true);
             }
             // when stretching is disabled
             if (!$image_stretch) {
                 // calculate ratio for first scaling
                 $ratio = $imageSourceWidth > $imageSourceHeight ? $width / $imageSourceWidth : $height / $imageSourceHeight;
                 // calculate new image size
                 $imageSourceNWidth = $imageSourceWidth * $ratio;
                 $imageSourceNHeight = $imageSourceHeight * $ratio;
                 // calculate ratio for second scaling
                 if ($width > $height) {
                     if ($imageSourceNHeight > $height) {
                         $ratio2 = $height / $imageSourceNHeight;
                         $imageSourceNHeight *= $ratio2;
                         $imageSourceNWidth *= $ratio2;
                     }
                 } else {
                     if ($imageSourceNWidth > $width) {
                         $ratio2 = $width / $imageSourceNWidth;
                         $imageSourceNHeight *= $ratio2;
                         $imageSourceNWidth *= $ratio2;
                     }
                 }
                 // setting position of putting thumbnail on canvas
                 $base_x = floor(($width - $imageSourceNWidth) / 2);
                 $base_y = floor(($height - $imageSourceNHeight) / 2);
             } else {
                 // when stretching is disabled
                 $imageSourceNWidth = $width;
                 $imageSourceNHeight = $height;
                 $base_x = 0;
                 $base_y = 0;
             }
             // copy image
             imagecopyresampled($imageBG, $imageSource, $base_x, $base_y, 0, 0, $imageSourceNWidth, $imageSourceNHeight, $imageSourceWidth, $imageSourceHeight);
             // save image depends from MIME type
             if ($imageData['mime'] == 'image/jpeg' || $imageData['mime'] == 'image/pjpeg' || $imageData['mime'] == 'image/jpg') {
                 imagejpeg($imageBG, $cache_dir . $filename, $quality);
             } elseif ($imageData['mime'] == 'image/gif') {
                 imagegif($imageBG, $cache_dir . $filename);
             } else {
                 imagepng($imageBG, $cache_dir . $filename);
             }
             return TRUE;
         } else {
             return FALSE;
         }
     }
 }