Представляю Вашему вниманию класс для пакетной обработки файлов jimage. Класс позволяет делать тумбики изображений, создавать коллаж из десятка картинок, и применять различные gd эффекты к изображениям. А также комбинировать все эти действия.

Класс написан мной для конкретного проекта, и с тех пор успешно применяется во других. Исходный код на гитхабе.

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

<?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' - по умолчанию, задаем и высоту и ширину, если входящее изображение вертикальное то размеры тумбика расчитываются так, чтобы все изображение влезло в заданные пределы.

Поясню все варианты на примерах, возьмем за основу изображение красавицы Хайден Панеттьери

Начальное изображение для тестов

$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_1.jpg',100,200,USE_HOWSET);// строгое задание размеров

Создание тумбика с использованием опции USE_HOWSET

Иображение растянуто, рамеры строго соответствуют тем, которые заданны

$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_2.jpg',200,0,USE_WIDTH);

Использование опции USE_WIDTH

Изображение по ширине строго соответствует 200px, а по высоте вычисляется пропорционально исходному иображению

$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_3.jpg',200,0,USE_HEIGHT);

Использование опции USE_HEIGHT

тоже, что и по ширине. Высота соответствует 3-му параметру, а ширина вычисляется.

$ji->thumb( ROOT.'/img/1.jpg',ROOT.'/img/mini_4.jpg',200,200,USE_AUTO);

 Использование опции USE_AUTO

Изображение вписывается в указанные приделы.

Разумеется - это не все возможности данного класса. Вот еще одно, интересное применение: пакетное применение фильров

<?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, будет применен эффект оттенки серого. Вот полный список поддерживаемых эффектов

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 эффекта нашей Хайден

<?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);

В результате получим такую фотографию

Использование метода filter и трех эффектов IMG_FILTER_GRAYSCALE, IMG_FILTER_BRIGHTNESS и IMG_FILTER_EDGEDETECT

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

Можно придумать 1000 и одно применение метода each, я покажу лишь, как я применил его в одном из своих проектов. В папке лежит множество изображений. Нужно вывести все их из папки, для плагина галереии на jquery. Нет ничего проще.

$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 )

  1. Первым параметром идет путь до папки с иображениями,
  2. вторым путь до итогового коллажа,
  3. третьим размер по высоте или ширине коллажа, в зависимости от того, какой вариант коллажа мы делаем (вертикальный или горизонтальный),
  4. 4-ый параметр и задает это  USE_HEIGHT - горизонтальный коллаж,  USE_WIDTH - вертикальный.
  5. Последние два параметра задают фильтры,
  6. 5-ой применяется ко всему коллажу и коллаж копируется полностью, и добавляется к исходному коллажу. 
  7. 6-ый просто применяется ко всему коллажу
  8. Сделаем автоматический коллаж изображений чудесной Фриды Пинто
  9. <?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);

    Автоматический коллаж изображений на PHP

  10. или вертикальный вариант

    $ji->joinAll(ROOT.'/frida/',ROOT.'/frida_kollag.jpg',100, USE_WIDTH);

    Вертикальный автоматический коллаж изображений на php 

Применим фильтр скетч эффекта

<?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);

и такой итоговый коллаж

 Применение эффекта к коллажу, с совмещением обоих изображений на php

или тоже самое но просто применяем к коллажу

$ji->joinAll(ROOT.'/frida/',ROOT.'/frida_kollag.jpg',100, USE_HEIGHT,false,IMG_FILTER_MEAN_REMOVAL);

Автоматическое создание коллажа на php и применение эффекта к нему

По умолчанию скрипт генерирует изображение только один раз, чтобы обновлять созданные изображение нужно поставить флаг  $ji->image_replace = true;

Вот и все, буду рад если класс окажется полезен кому-нибудь. 

Рассказать друзьям
author.jpg

Платная консультация по вопросам 2500 руб/час

Прочитали статью и остались вопросы? Меня зовут Валерий и я её автор. С радостью объясню Вам в скайпе все затруднительные моменты, которые остались за рамками статьи!

Подробнее ...

Добавить комментарий