MIDAV.RU

MIDAV.RU

Учусь делать сайты в свободное время .

Работа с изображениями в Joomla 3 , класс JImage

Просмотров: 21652Комментарии: 1
Joomla
Работа с изображениями в Joomla 3 , класс JImage

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

В этой статье я подробнее расскажу как использовать класс JImage для обработки изображений в Joomla 3 .

Итак приступим . Для работы я выбрал два изображения с цветами , мне нравятся цветы smile . Одно изображение скажем так , горизонтально ориентированное , второе вертикально . Другими словами они не квадратные , а прямоугольные . У одного изображения больше горизонтальный размер , у второго вертикальный . Так будет проще понять как изменяет размеры класс JImage .

Итак , я буду кратко объяснять , что делает каждый метод и показывать полученый результат .

cvetok1.jpg cvetok2.jpg

Для начала посмотрим общие методы . Чтобы делать манипуляции с изображением , надо создать новый объект JImage и уже с ним производить различные действия . Делается это так :

jimport(joomla.image.image); // подключаем библиотеку для работы с изображениями
$image = new JImage('image.jpg'); // получаем новый объект JImage с которым будем работать
$image->getWidth() ; // получить ширину изображения
$image->getHeight(); // получить высоту изображения

Первым рассмотрим метод resize .

$image->resize($width, $height, $createNew = true, $scaleMethod = self::SCALE_INSIDE);

$width - это ширина нового изображения

$height - это высота нового изображения

$createNew - если эта переменная установлена в true , то результаты будут записаны в текущий объект JImage , если в false , объект останется без изменений а результат будет просто возвращён функцией .

$scaleMethod - это константа , обозначающая метод которым будет преобразовано изображение .

Рассмотрим на примерах .

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

Resize - SCALE_FILL

cvetok1_11.jpg

Ширина : 100

Высота : 100

vetok2_11.jpg

Ширина : 100

Высота : 100

$image->resize(100, 100, true, 1);

Метод SCALE_INSIDE - самый сложный метод класса . Работает в трех режимах :

  1. Если указаны высота и ширина , выбирает такие размеры , чтобы изображение залезло внутрь новых размеров по наибольшему из указаных размеров . Второй размер подгоняется пропорционально .
  2. Если указана только ширина , подгоняется по ширине , высота подгоняется пропорционально .
  3. Если указана высота , подгоняется по высоте , ширина подгонятся пропорционально .
Resize - SCALE_INSIDE

cvetok1_12.jpg

Ширина : 100

Высота : 67

cvetok2_12.jpg

Ширина : 79

Высота : 100

$image->resize(100, 100, true, 2);
Resize - SCALE_INSIDE по ширине

cvetok1_17.jpg

Ширина : 100

Высота : 67

cvetok2_17.jpg

Ширина : 100

Высота : 127

$image->resize(100, 0, true, 2);
Resize - SCALE_INSIDE по высоте

cvetok1_18.jpg

Ширина : 150

Высота : 100

cvetok2_18.jpg

Ширина : 79

Высота : 100

$image->resize(0, 100, true, 2);

SCALE_OUTSIDE наоборот подгоняет изображение по наименьшей стороне , вторая будет изменена пропорционально .

Resize - SCALE_OUTSIDE

cvetok1_13.jpg

Ширина : 150

Высота : 100

cvetok2_13.jpg

Ширина : 100

Высота : 127

$image->resize(100, 100, true, 3);

SCALE_FIT изменяет изображение методом SCALE_INSIDE , и заливает пустое пространство цветом заливки . Если изображение не прозрачное , то это будет цвет по умолчанию - чёрный . Изменить цвет заливки не изменяя сам класс нельзя . Что на мой взгляд очень неудобно .

Resize - SCALE_FIT

cvetok1_16.jpg

Ширина : 100

Высота : 100

cvetok2_16.jpg

Ширина : 100

Высота : 100

$image->resize(100, 100, true, 6);

Метод crop обрезает изображение по указаным размерам .

crop($width, $height, $left = null, $top = null, $createNew = true)

$left - смещение слева .

$top - смещение сверху .

Crop

cvetok1_14.jpg

Ширина : 100

Высота : 100

cvetok2_14.jpg

Ширина : 100

Высота : 100

$image->crop(100, 100, null, null, true);

Метод crop_resize сначала изменяет изображение методом SCALE_INSIDE и потом обрезает большую сторону до нужных размеров . На мой взгляд этот метод лучше всего подходит для создания миниатюр изображений .

Crop_resize

cvetok1_15.jpg>

Ширина : 100

Высота : 100

cvetok2_15.jpg

Ширина : 100

Высота : 100

$image->cropResize(100, 100, true);

Метод rotate применяется для поворота изображений .

rotate($angle, $background = -1, $createNew = true);

$angle - угол поворота , против часовой стрелки .

$background - цвет фона .

Rotate

cvetok1_31.jpg

Ширина : 177

Высота : 177

cvetok2_32.jpg

Ширина : 241

Высота : 241

$image->resize(150, 0, true, 2);
$image->rotate(45, 0xffffff, true);

Чтобы сохранить полученый результат обработки , применяется метод toFile():

$image->toFile($path, $type = IMAGETYPE_JPEG, array $options = array());

$type - формат сохраняемого изображения , доступны jpeg, png, gif . По умолчанию jpeg .

$option - в массиве опций можно передать качество сохраняемого изображения . Доступно для форматов jpeg и png . Например :

$options = array('quality' => '100');

Также в классе JImage реализовано применение фильтров . Для применения фильтра к изображению , надо загрузить нужную библиотеку .

jimport('joomla.image.filter');
$image = new JImage('image.jpg');
$image->filter('название фильтра');

Для некоторых фильтров доступен второй параметр . Например для фильтра brightness можно передать уровень яркости :

array(IMG_FILTER_BRIGHTNESS => 100) .

В принципе методы фильтров класса JImage это просто обёртки для функции imagefilter() библиотеки GD . Кому интересно можно про нее почитать например здесь . В таблице я приведу просто названия фильтров и полученый результат .

Оригинал

cvetok1_test.jpg

>

Brightness

cvetok1_brightness.jpg

Contrast

cvetok1_contrast.jpg

Edgedetect

cvetok1_edgedetect.jpg

Emboss

cvetok1_emboss.jpg

Grayscale

cvetok1_grayscale.jpg

Negate

cvetok1_negate.jpg

Sketchy

cvetok1_sketchy.jpg

Smooth

cvetok1_smooth.jpg

Вот и все , статья получилась для меня нетипично длинной smile Надеюсь , что она кому-нибудь будет полезна .

Комментариев: 1 RSS

test page

1 effrit 18-11-2016 21:51

Спасибо за статью! Очень пригодилась (не знал, как качество выставить превьюхам)

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question


Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

     

  

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

(обязательно)