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

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

В качестве исходного изображения буду использовать это: Исходное изображение

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

$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 Жестко подгонит под указанный размер SCALE_FILL
JImage::SCALE_INSIDE
(Значение по умолчанию)
Высота будет уменьшена до указанной, ширина будет пропорционально уменьшена или увеличена SCALE_INSIDE
JImage::SCALE_OUTSIDE Ширина будет уменьшена до указанной, высота будет пропорционально уменьшена или увеличена SCALE_OUTSIDE

 

 

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

 

 

Для поворота на определенный угол изображения существует метод resize($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 );

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

 

 

Для того что бы получить часть изображения существует метод 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);

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

 

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

Для работы с фильтрами существует функция 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 );