В Joomla 2.5 появился новый класс для обработки изображений JImage. С помощью этого класса мы можем выполнять различные манипуляции с изображениями, например такие как: изменение размера, наложение различных эффектов и т.д. а так же можно получать информацию об изображении!

Попробуем рассмотреть детально этот класс и методы которые есть в нем!

В качестве исходного изображения буду использовать это: basic
Для того что бы использовать этот класс и загрузить в него изображение нужно написать следующий код:

$pathToImage = 'images/basic.jpg';
$image = new JImage( $pathToImage );

 



Изображение можно загрузить и по другому:

$pathToImage = 'images/basic.jpg';
$image = new JImage;
$image->loadFile($pathToImage);

 



Если мы хотим получить ширину или высоту изображения то для этого есть два метода:

$pathToImage = 'images/basic.jpg';
$image = new JImage( $pathToImage );
echo $image->getWidth();//Выводим ширину (выведет 650)
echo $image->getHeight();//Выводим высоту (выведет 406)

 



Что бы получить абсолютный путь по которому лежит изображение необходимо использовать метод getPath() :

 

$pathToImage = 'images/basic.jpg';
$image = new JImage( $pathToImage );
echo $image->getPath();

 

 

 



Для уменьшения размера изображения существует метод

resize($width, $height, $createNew, $scaleMethod);

 


В этом функции четыре параметра:
$width - новая ширина изображения
$height - новая высота изображения
$createNew - если этот параметр установить в true то метод вернет нам новый экземпляр класса JImage в котором будут содержаться загруженное изображение со всеми изменениями произведенными ранее
$scaleMethod - метод масштабирования изображения

Пример использования:

$pathToImage = 'images/basic.jpg';
$image = new JImage( $pathToImage );
$image->resize(100, 100, false, JImage::SCALE_INSIDE );

 



Всего существует три варианта для масштабирования изображения. Ниже приведена таблица с методами масштабирования и результатом работы этих методов:

МасштабированиеОписаниеРезультат
JImage::SCALE_FILL Жестко подгонит под указанный размер scale1
JImage::SCALE_INSIDE
(Значение по умолчанию)
Высота будет уменьшена до указанной, ширина будет пропорционально уменьшена или увеличена scale2
JImage::SCALE_OUTSIDE Ширина будет уменьшена до указанной, высота будет пропорционально уменьшена или увеличена scale3

 

 

Для сохранения изображения после манипуляция с ним JImage существует метод

toFile($path, $type, $options);

 


$path - путь по которому сохранить файл
$type - тип файла при сохранении. Всего есть три типа для сохранения файлов:
  - IMAGETYPE_GIF GIF файл
  - IMAGETYPE_PNG PNG файл
  - IMAGETYPE_JPEG JPEG файл (этот параметр по умолчанию)
$options - опции! на данный момент там возможно использовать только один параметр $options['quality'] который устанавливает качество изображения для jpg и png файлов!

 

rotate($angle, $background, $createNew );

 

Для поворота на определенный угол изображения существует метод
$angle - угол поворота
$background - фон заливки пространтсва которое остается после поворота (по умолчанию заливает белым цветом)
$createNew - если этот параметр установить в true то метод вернет нам новый экземпляр класса

$pathToImage = 'images/basic.jpg';
$image = new JImage( $pathToImage );
//уменьшаем до 200 на 200 точек
$imageResizes= $image->resize(200, 200, true);
//поворачиваем на 35 градусов и заливаем розовым цветом свободное пространство
$imageRotated = $imageResizes->rotate( 35, 0xff00ff, true );

 



Пример использования:


rotate

После выполнения кода выше результатом будет новое изображение:
 

 

Для того что бы получить часть изображения существует метод

crop($width, $height, $left, $top, $createNew);

 

$width - ширина
$height - высота
$left - смещение с левой стороны
$top - смещение с правой стороны
$createNew - если этот параметр установить в true то метод вернет нам новый экземпляр класса

Пример использования:

$pathToImage = 'images/basic.jpg';
$image = new JImage( $pathToImage );
$imageCroped = $image->crop(160, 130, 110, 30, true);

 



После выполнения кода выше результатом будет новое изображение:
crop
 

Работа с фильтрами:

Для работы с фильтрами существует функция

filter($type, $options);

 


$type - тип фильтра
$options - опции фильтра

Почему то мне не удалось подключить фильтры чере jinclude, то есть строка jimport jimport( 'joomla.image.filters' ); не помогла, и постоянно выводилась ошибка о том что не найден фильтр!
По этому пришлось напрямую подключать фильтры через include





Фильтры:

ФильтрОписаниеРезультат
brightness Увеличивает или уменьшает яркость изображения. Что бы регулировать яркость нужно в опциях передать параметр IMG_FILTER_BRIGHTNESS регулировать контрастность можно как отрицательными так и положительными значениями параметра brightness
$filterType = 'brightness';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$options = array( IMG_FILTER_BRIGHTNESS => 50 );
$imageResized->filter( $filterType, $options );



ФильтрОписаниеРезультат
contrast Увеличивает или уменьшает контрастность изображения. Что бы регулировать контрастность нужно в опциях передать параметр IMG_FILTER_CONTRAST отрицательное значение уменьшает яркость, положительное увеличивает! contrast

Пример использования:

$filterType = 'contrast';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$options = array( IMG_FILTER_CONTRAST => -100 );
$imageResized->filter( $filterType, $options );

 




ФильтрОписаниеРезультат
edgedetect Принцип работы фильтра можно увидеть на изображении.
Опций у этого фильтра нет!
edgedetect

Пример использования:

$filterType = 'edgedetect';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$imageResized->filter( $filterType );

 




ФильтрОписаниеРезультат
emboss Принцип работы фильтра можно увидеть на изображении.
Опций у этого фильтра нет!
emboss

Пример использования:

$filterType = 'emboss';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$imageResized->filter( $filterType );




ФильтрОписаниеРезультат
grayscale Оттенки серого.
Принцип работы фильтра можно увидеть на изображении.
Опций у этого фильтра нет!
grayscale

Пример использования:

$filterType = 'grayscale';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$imageResized->filter( $filterType );

 




ФильтрОписаниеРезультат
negate Негатив.
Принцип работы фильтра можно увидеть на изображении.
Опций у этого фильтра нет!
negate

Пример использования:

$filterType = 'negate';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$imageResized->filter( $filterType );

 




ФильтрОписаниеРезультат
sketchy Негатив.
Принцип работы фильтра можно увидеть на изображении.
Опций у этого фильтра нет!
sketchy

Пример использования:

$filterType = 'sketchy';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$imageResized->filter( $filterType );

 




ФильтрОписаниеРезультат
smooth Сглаживание.
Принцип работы фильтра можно увидеть на изображении.
у фильтра есть опция IMG_FILTER_SMOOTH которая указывает в целочисленном виде силу сглаживания!
smooth

Пример использования:

$filterType = 'smooth';
include_once JPATH_BASE . '/libraries/joomla/image/filters/' . $filterType . '.php';
$image = new JImage( $pathToImage );
$imageResized = $image->resize( 200, 200 );
$options = array( IMG_FILTER_SMOOTH => -100 );
$imageResized->filter( $filterType, $options );

 

В Joomla 3 появились небольшие изменения.

У класса появилось несколько новых методов для работы с изображениями.

 

Исходное изображение: test

Метод

cropResize($width, $height, $createNew = true);

 


обрезает изображение и масштабирует его до указанного размера, вырезается центр изображения.
Этот метод отлично подходит для создания миниатюр изображений.

result

Пример:

$image = new JImage( JPATH_SITE . '/test.jpg' );
$image->cropResize( 200, 300, false );
$image->toFile(  JPATH_SITE . '/result.jpg' );

 

Следующий метод который появился:

createThumbs($thumbSizes, $creationMethod = self::SCALE_INSIDE, $thumbsFolder = null)

 

Этот метод позволит нам создать группу миниатюр из нашего изображения.
Основные параметры которые принимает этот метод:

  • $thumbSizes - массив в котором передаются размеры миниатюр
  • $creationMethod - каким методом масштабировать фотографии
  • $thumbsFolder - папка в которой будут сохранены миниатюры (по умолчанию это /thumbs)

К дополнению к стандартным вариантам масштабирования: SCALE_FILL, SCALE_INSIDE и SCALE_OUTSIDE в этом методе можно использовать еще два варианта:
CROP - обрежет изображение по указанным размерам
CROP_RESIZE - работает та же как и метод cropResize

Пример работы данного метода:

$image = new JImage( JPATH_SITE . '/test.jpg' );
$thumbs = $image->createThumbs( array( '200x200', '100x100' ), 
			JImage::CROP_RESIZE,JPATH_SITE . '/images/thumbs' );

 

После выполнения этого кода в папке /images/thumbs у нас появится два изображения:

test 200x200 test 100x100

Метод createThumbs после выполнения вернет массив объектов JImage которыми можно дальше манипулировать как одиночными файлами:

Array
(
    [0] => JImage Object
        (
            [handle:protected] => Resource id #132
            [path:protected] => /thumbs/test_200x200.jpg
        )
 
    [1] => JImage Object
        (
            [handle:protected] => Resource id #134
            [path:protected] => /thumbs/test_100x100.jpg
        )
 
)

 

И последний метод 

generateThumbs($thumbSizes, $creationMethod = self::SCALE_INSIDE)

 

Этот метод работает как и метод createThumbs только не сохраняет сразу миниатюры, а возвращает массив объектов которые мы можем видоизменять как нам захочется с помощью класса JImage!
Принимает этот метод всего два параметра и они совпадают с первыми двумя параметрами которые принимает метод createThumbs

Внимание! При указании размеров миниатюр для методов createThumbs и generateThumbs указывайте их от большего размера к меньшему!

 

Примечание.

Вся работа с изображениями в Joomla организована на библиотеке GD http://php.net/manual/ru/book.image.php. Так что можно ее свободно применять при необходимости расширения функционала и не париться.