This is a function to create thumbnail images from a full image file in Joomla!. It uses the powerful JImage library included in the Joomla! Platform.
Edited 17/07/2012 - Added creationMethod parameter to choose the thumbnail creation method. Includes a creation method using crop.
// required libraries
jimport('joomla.image.image');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
/**
* Function to create thumbs from one image
* @author Roberto Segura - Digital Disseny, S.L.
* @version 16/07/2012
*
* @param string $imgPath - path to full image
* @param string/array $thumbSizes - desired thumb sizes. Example: array('50x50','120x250');
* @param string $thumbsFolder - thumbs destination folder
* @param integer $creationMethod - thumbnail creation method
*
* @return array of generated thumbnails
*/
function createThumbs($imgPath, $thumbSizes, $thumbsFolder, $creationMethod = 2) {
if (!empty($thumbSizes) && JFile::exists($imgPath)) {
// accept a single thumbsize string as parameter
if (!is_array($thumbSizes)) {
$thumbSizes = array($thumbSizes);
}
// check | try to creaate thumbsfolder
if (JFolder::exists($thumbsFolder) || JFolder::create($thumbsFolder)) {
$generated = array();
// process thumbs
foreach ($thumbSizes as $thumbSize) {
// get thumb size
$size = explode('x',strtolower($thumbSize));
if (count($size) != 2) {
return false;
}
$thumbWidth = $desiredWidth = $size[0];
$thumbHeight = $desiredHeight = $size[1];
// source object
$sourceImage = new JImage($imgPath);
$srcHeight = $sourceImage->getHeight();
$srcWidth = $sourceImage->getWidth();
$imgProperties = JImage::getImageFileProperties($imgPath);
// generate thumb name
$filename = JFile::getName($imgPath);
$fileExtension = JFile::getExt($filename);
$thumbFileName = str_replace('.' . $fileExtension, '_' . $desiredWidth .'x' . $desiredHeight . '.' . $fileExtension, $filename);
// try to generate the thumb
if ($creationMethod == 4) {
// auto crop centered coordinates
$left = round(($srcWidth - $thumbWidth) / 2);
$top = round(($srcHeight - $thumbHeight) / 2);
// crop image
$thumb = $sourceImage->crop($thumbWidth, $thumbHeight, $left, $top, true);
} else {
// resize image
$thumb = $sourceImage->resize($thumbWidth, $thumbHeight, true, $creationMethod);
}
$thumbFileName = $thumbsFolder . DIRECTORY_SEPARATOR . $thumbFileName;
$thumb->toFile($thumbFileName, $imgProperties->type);
if (JFile::exists($thumbFileName)) {
$generated[] = $thumb;
}
}
return $generated;
}
}
return false;
}
Example uses:
$thumbSizes = array( '50x50', '250x100' );
$thumbsFolder = dirname($destFile) . DIRECTORY_SEPARATOR . 'thumbs';
// create thumbs resizing with forced proportions
$createdThumbs = createThumbs($destFile, $thumbSizes, $thumbsFolder, 1);
// create thumbs resizing proportionally scale inside
$createdThumbs = createThumbs($destFile, $thumbSizes, $thumbsFolder, 2);
// create thumbs resizing proportionally scale outside
$createdThumbs = createThumbs($destFile, $thumbSizes, $thumbsFolder, 3);
// create thumbs cropping a centered subimage
$createdThumbs = createThumbs($destFile, $thumbSizes, $thumbsFolder, 4);
This will create a thumbs folder in the same folder as the source image containing 2 thumbnails