
Представляю Вашему вниманию класс для пакетной обработки файлов jimage. Класс позволяет делать тумбики изображений, создавать коллаж из десятка картинок, и применять различные gd эффекты к изображениям. А также комбинировать все эти действия.
Класс написан мной для конкретного проекта, и с тех пор успешно применяется во других. Исходный код на гитхабе.
Покажу, как использовать на примере создания тумбиков или если говорить научным языком маленьких копий изображений.
1 2 3 4 5 6 |
<?php define('ROOT',dirname(__FILE__)); // для работы скрипта должна быть объявлена // эта константа содержащая корень сайта include "class.jimage.php"; $ji = new jimage(); $ji->thumb(ROOT.'/img/1.png',ROOT.'/img/mini_1.png',100); |
элементарно и просто. У метода есть ряд настроек, первой идет путь до изображения. Второй путь до итогового тумбика, 3 и 4 это размеры по ширине и высоте соответственно, 5 — ый параметр это флаг, который может иметь несколько значений
USE_HOWSET или » — и ширина и высота должны быть заданы, размер итогового тумбика задается строго, изображение обычно искажается
USE_WIDTH или ‘w’ — задается только ширина итогового тумбика, высота считается пропорционально по заданному изображению
USE_HEIGHT или ‘h’ — тоже только по высоте
USE_AUTO или ‘a’ — по умолчанию, задаем и высоту и ширину, если входящее изображение вертикальное то размеры тумбика расчитываются так, чтобы все изображение влезло в заданные пределы.
Поясню все варианты на примерах, возьмем за основу изображение красавицы Хайден Панеттьери
1 |
$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_1.jpg',100,200,USE_HOWSET);// строгое задание размеров |
Иображение растянуто, рамеры строго соответствуют тем, которые заданны
1 |
$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_2.jpg',200,0,USE_WIDTH); |
Изображение по ширине строго соответствует 200px, а по высоте вычисляется пропорционально исходному иображению
1 |
$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_3.jpg',200,0,USE_HEIGHT); |
тоже, что и по ширине. Высота соответствует 3-му параметру, а ширина вычисляется.
1 |
$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_4.jpg',200,200,USE_AUTO); |
Изображение вписывается в указанные приделы.
Разумеется — это не все возможности данного класса. Вот еще одно, интересное применение: пакетное применение фильров
1 2 3 4 5 6 7 8 |
<?php define('ROOT',dirname(__FILE__)); include "class.jimage.php"; $ji = new jimage(); $ji->image_replace = true; $ji->each(ROOT.'/img/',function($image,$_this){ $_this->filter($image,IMG_FILTER_GRAYSCALE); }); |
В результате, ко всем изображениям в папке img, будет применен эффект оттенки серого. Вот полный список поддерживаемых эффектов
1 2 3 4 5 6 7 8 9 10 11 12 |
IMG_FILTER_NEGATE: Меняет все цвета изображения на обратные. IMG_FILTER_GRAYSCALE:Преобразует изображения в оттенки серого. IMG_FILTER_BRIGHTNESS: Изменение яркости изображения. Вторым аргументом после типа фильтра можно указать уровень яркости. IMG_FILTER_CONTRAST: Изменение контрастности изображения. Вторым аргументом после типа фильтра можно указать уровень контрастности. IMG_FILTER_COLORIZE: как и IMG_FILTER_GRAYSCALE, За исключениме того, что можно задать параметры r, g, b, и уровень альфа канала. Значение от 0 до 255 IMG_FILTER_EDGEDETECT: Использует обнаружение края, чтобы выделить края в изображении. IMG_FILTER_EMBOSS: Выделение объема изображения IMG_FILTER_GAUSSIAN_BLUR: Размывает изображение, используя метод Гаусса. IMG_FILTER_SELECTIVE_BLUR: Размывает изображение IMG_FILTER_MEAN_REMOVAL: "sketchy" эффект. IMG_FILTER_SMOOTH: Делает изображение более гладким. Вторым параметром можно установить уровень гладкости. IMG_FILTER_PIXELATE: Применяется эффект пикселизации к изображению, вторым параметром можно установить размер блока |
Метод фильтр можно применять и для одиночных изображений, к примеру применим сразу 3 эффекта нашей Хайден
1 2 3 4 5 6 7 8 |
<?php define('ROOT',dirname(__FILE__)); include "class.jimage.php"; $ji = new jimage(); $ji->image_replace = true; $ji->filter(ROOT.'/img/1.jpg',IMG_FILTER_GRAYSCALE); $ji->filter(ROOT.'/img/1.jpg',IMG_FILTER_BRIGHTNESS,40); $ji->filter(ROOT.'/img/1.jpg',IMG_FILTER_EDGEDETECT); |
В результате получим такую фотографию
Удобно для быстрой генерации уникальных изображений, к примеру для досок объявлений после работы парсера.
Можно придумать 1000 и одно применение метода each, я покажу лишь, как я применил его в одном из своих проектов. В папке лежит множество изображений. Нужно вывести все их из папки, для плагина галереии на jquery. Нет ничего проще.
1 2 3 4 5 6 7 8 |
$jI = new jImage(); $jI->town = 'ufa'; $jI->s = ''; $jI->each(ROOT.'/img/',function($image,$_this){ list($w) = getimagesize($image); $_this->s.='<div><img width="'.$w.'px" src="images/towns/'.$_this->town.'/thumbs/'.basename($image).'"/></div>'; }); echo $jI->s; |
Как я уже писал выше, класс умеет делать автоматический коллаж из нескольких изображений. Можно использовать для этого специальные сервисы чтобы сделать коллаж онлайн. Однако, если Вам нужно автоматическое создание коллажей, то все они Вам не подходят. А класс делает это на раз. Для этого есть метод joinAll( $path,$file_output,$size,$org = USE_HEIGHT,$filter_add = false,$filter_use = false )
- Первым параметром идет путь до папки с иображениями,
- вторым путь до итогового коллажа,
- третьим размер по высоте или ширине коллажа, в зависимости от того, какой вариант коллажа мы делаем (вертикальный или горизонтальный),
- 4-ый параметр и задает это USE_HEIGHT — горизонтальный коллаж, USE_WIDTH — вертикальный.
- Последние два параметра задают фильтры,
- 5-ой применяется ко всему коллажу и коллаж копируется полностью, и добавляется к исходному коллажу.
- 6-ый просто применяется ко всему коллажу
- Сделаем автоматический коллаж изображений чудесной Фриды Пинто
1 2 3 4 5 6 |
<?php define('ROOT',dirname(__FILE__)); include "class.jimage.php"; $ji = new jimage(); $ji->image_replace = true; $ji->joinAll(ROOT.'/frida/',ROOT.'/frida_kollag.jpg',100); |
или вертикальный вариант
1 |
$ji->joinAll(ROOT.'/frida/',ROOT.'/frida_kollag.jpg',100, USE_WIDTH); |
Применим фильтр скетч эффекта
1 2 3 4 5 6 |
<?php define('ROOT',dirname(__FILE__)); include "class.jimage.php"; $ji = new jimage(); $ji->image_replace = true; $ji->joinAll(ROOT.'/frida/',ROOT.'/frida_kollag.jpg',100, USE_HEIGHT,IMG_FILTER_MEAN_REMOVAL); |
и такой итоговый коллаж
или тоже самое но просто применяем к коллажу
1 |
$ji->joinAll(ROOT.'/frida/',ROOT.'/frida_kollag.jpg',100, USE_HEIGHT,false,IMG_FILTER_MEAN_REMOVAL); |
По умолчанию скрипт генерирует изображение только один раз, чтобы обновлять созданные изображение нужно поставить флаг $ji->image_replace = true;
Вот и все, буду рад если класс окажется полезен кому-нибудь.
.