%PDF- %PDF-
| Direktori : /home/lightco1/luminero.com.au/libraries/compojoom/image/ |
| Current File : /home/lightco1/luminero.com.au/libraries/compojoom/image/image.php |
<?php
/**
* @package Lib_Compojoom
* @author DanielDimitrov <daniel@compojoom.com>
* @date 25.02.2015
*
* @copyright Copyright (C) 2008 - 2013 compojoom.com . All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('_JEXEC') or die('Restricted access');
if (JVERSION < 3)
{
JLoader::register('JImage', JPATH_LIBRARIES . '/compojoom/image/joomla/image.php');
}
/**
* Class CompojoomImage
*
* @since 4.0.32
*/
class CompojoomImage extends JImage
{
/**
* Method to generate thumbnails from the current image. It allows
* creation by resizing or cropping the original image.
*
* @param mixed $thumbSizes String or array of strings. Example: $thumbSizes = array('150x75','250x150');
* @param integer $creationMethod 1-3 resize $scaleMethod | 4 create croppping | 5 resize then crop
*
* @return array
*
* @since 12.2
* @throws LogicException
* @throws InvalidArgumentException
*/
public function generateThumbs($thumbSizes, $creationMethod = self::SCALE_INSIDE)
{
// Make sure the resource handle is valid.
if (!$this->isLoaded())
{
throw new LogicException('No valid image was loaded.');
}
// Accept a single thumbsize string as parameter
if (!is_array($thumbSizes))
{
$thumbSizes = array($thumbSizes);
}
// Process thumbs
$generated = array();
if (!empty($thumbSizes))
{
foreach ($thumbSizes as $key => $thumbSize)
{
$thumbSize = strtolower($thumbSize);
// Desired thumbnail size
$size = explode('x', $thumbSize);
if (count($size) != 2)
{
throw new InvalidArgumentException('Invalid thumb size received: ' . $thumbSize);
}
$thumbWidth = $size[0];
$thumbHeight = $size[1];
switch ($creationMethod)
{
// Case for self::CROP
case 4:
$thumb = $this->crop($thumbWidth, $thumbHeight, null, null, true);
break;
// Case for self::CROP_RESIZE
case 5:
$thumb = $this->cropResize($thumbWidth, $thumbHeight, true);
break;
default:
$thumb = $this->resize($thumbWidth, $thumbHeight, true, $creationMethod);
break;
}
// Let's try to keep up the orientation of the image
// Setting memory_limit that high, because with bigger images rotating fails often
ini_set('memory_limit', '256M');
if (function_exists('exif_read_data'))
{
$exif = @exif_read_data($this->getPath());
if (!empty($exif['Orientation']))
{
switch ($exif['Orientation'])
{
case 8:
$thumb->rotate(90, 0, false);
break;
case 3:
$thumb->rotate(180, 0, false);
break;
case 6:
$thumb->rotate(-90, 0, false);
break;
}
}
}
// Store the thumb in the results array
$generated[$key] = $thumb;
}
}
return $generated;
}
/**
* Method to create thumbnails from the current image and save them to disk. It allows creation by resizing
* or croppping the original image.
*
* @param mixed $thumbSizes string or array of strings. Example: $thumbSizes = array('150x75','250x150');
* @param integer $creationMethod 1-3 resize $scaleMethod | 4 create croppping
* @param string $thumbsFolder destination thumbs folder. null generates a thumbs folder in the image folder
*
* @return array
*
* @since 12.2
* @throws LogicException
* @throws InvalidArgumentException
*/
public function createThumbs($thumbSizes, $creationMethod = self::SCALE_INSIDE, $thumbsFolder = null)
{
jimport('joomla.filesystem.folder');
// Make sure the resource handle is valid.
if (!$this->isLoaded())
{
throw new LogicException('No valid image was loaded.');
}
// No thumbFolder set -> we will create a thumbs folder in the current image folder
if (is_null($thumbsFolder))
{
$thumbsFolder = dirname($this->getPath()) . '/thumbs';
}
// Check destination
if (!is_dir($thumbsFolder) && (!is_dir(dirname($thumbsFolder)) || !JFolder::create($thumbsFolder)))
{
throw new InvalidArgumentException('Folder does not exist and cannot be created: ' . $thumbsFolder);
}
// Process thumbs
$thumbsCreated = array();
if ($thumbs = $this->generateThumbs($thumbSizes, $creationMethod))
{
// Parent image properties
$imgProperties = self::getImageFileProperties($this->getPath());
foreach ($thumbs as $key => $thumb)
{
// Get thumb properties
$thumbWidth = $thumb->getWidth();
$thumbHeight = $thumb->getHeight();
// Generate thumb name
$filename = pathinfo($this->getPath(), PATHINFO_FILENAME);
$fileExtension = pathinfo($this->getPath(), PATHINFO_EXTENSION);
$thumbFileName = $filename . '_' . $thumbWidth . 'x' . $thumbHeight . '.' . $fileExtension;
// Save thumb file to disk
$thumbFileName = $thumbsFolder . '/' . $thumbFileName;
$options = array('quality' => 60);
// If we are dealing with PNGs, then change the quality
if ($imgProperties->type === IMAGETYPE_PNG)
{
$options['quality'] = 6;
}
if ($thumb->toFile($thumbFileName, $imgProperties->type, $options))
{
// Return JImage object with thumb path to ease further manipulation
$thumb->path = $thumbFileName;
$thumbsCreated[$key] = $thumb;
}
}
}
return $thumbsCreated;
}
}