PPMage — легковесная PHP-библиотека для применения эффектов к изображениям.
Демо
Пример работы библиотеки можно посмотреть на этой странице.
Обновления
- 2015-02-02 - Добавлена возможность наложения двух изображений с различными режимами и прозрачностью.
- 2015-01-30 - Добавлены эффекты регулировки ARGB и HSB.
- 2015-01-29 - Первый релиз.
Использование
include_once('ppmage/PPMage.php');
$image = PPMage::fromFile('source.jpg')->
// Применяем эффекты
eInvert(1, 1, 1, 0)->
eBoxBlur(5, 5)->
eExtractChannel(2, 0)->
eInvert(0, 1, 0, 0)->
// Получаем картинку
getImage();
// Сохраняем в файл
imagejpeg($image->getData(), 'result.jpg', 85);
// Или выводим в base64
echo '<img src="data:image/png;base64,', $image->exportAsBase64(), '" alt="base64_image" />';
// Получаем информацию об изображении
echo '
Размер: ', $image->getWidth(), 'x', $image->getHeight();
echo '
Тип: ', $image->getType();
Загружать изображение можно:
- Из файла:
PPMage::fromFile("file.jpg")
- По ссылке:
PPMage::fromUrl('http://lorempixel.com/400/200/')
- Из данных изображения:
$image = imagecreatetruecolor(240, 50);
PPMage::fromParameters(240, 50, $image);
Эффекты
Исходное изображение
Обесцвечивание
Преобразовывает изображение в оттенки серого.
eDecolour()
Инвертирование каналов
Инвертирует один или несколько выбранных каналов.
eInvert(красный [0..1], зелёный [0..1], синий [0..1], прозрачность [0..1])
// Инвертирует синий канал
eInvert(0, 0, 1, 0)
// Инвертирует все каналы (негатив)
eInvert(1, 1, 1) // параметры можно опускать
Соляризация
Эффект соляризации (передержки).
eSolarize()
Постеризация
Применяет эффект постеризации (огрубление).
ePosterization(значение [0..255])
Чем выше значение, тем грубее цвета.
ePosterization(64)
ePosterization(200)
Извлечь канал
Извлекает один из 4 каналов изображения (прозрачность, красный, зелёный, синий). Также может перевести этот канал в оттенки серого.
ПРИМЕЧАНИЕ: на непрозрачных картинках, извлечение прозрачного канала возвращает чёрную картинку.
eExtractChannel(канал [0..3], монохромный [0..1])
- Канал:
- 0 - прозрачность
- 1 - красный
- 2 - зелёный
- 3 - синий
// извлекает красный канал
eExtractChannel(1, 0)
// извлекает зелёный канал
eExtractChannel(2) // параметры по умолчанию можно опускать
// извлекает синий канал, переводя его в монохромный
eExtractChannel(3, 1)
RGB-коррекция
Изменяет красный, зелёный, синий каналы и канал прозрачности изображения.
eRGBCorrection(красный [-255..255], зелёный [-255..255], синий [-255..255], прозрачность [-255..255])
ПРИМЕЧАНИЕ: при изменении прозрачности, следует сохранять изображение в формате png или gif, иначе этот канал игнорируется.
eRGBCorrection(-70, -18, -221)
// RGB коррекция с изменением прозрачности
eRGBCorrection(-255, -140, 217, -180)
HSB-коррекция
Изменяет оттенок, насыщенность и яркость изображения.
eHSBCorrection(оттенок [0..360], насыщенность [-100..100], яркость [-100..100], тонировка [0..1])
Если включен режим Тонировка, изображение окрасится в заданный оттенок, иначе к каждому цвету будет прибавлено значение параметра Оттенок.
// Изменение оттенка на 259 градусов,
// прибавление насыщенности на 10
// и снижение яркости на 5
eHSBCorrection(259, 10, -5, 0)
// Тонирование изображения
eHSBCorrection(259, 10, -5, 1)
Насыщенность
Изменяет насыщенность изображения.
eSaturation(значение [-255..255])
// Уменьшение насыщенности
eSaturation(-164)
// Увеличение насыщенности
eSaturation(100)
Контрастность
Изменяет контрастность изображения.
eContrast(значение [-100..100])
// Уменьшение контрастности
eContrast(-80)
// Увеличение контрастности
eContrast(60)
Гамма
Изменяет уровень гаммы изображения.
eGamma(значение [-50..50])
// Уменьшение гаммы
eGamma(-40)
// Увеличение гаммы
eGamma(25)
Размытие
Применяет эффект размытия.
eSmooth(значение [1..25])
ПРИМЕЧАНИЕ: чем больше величина, тем дольше применяется эффект.
eSmooth(6)
Коробочное размытие
Применяет быстрое коробочное размытие по двум направлениям.
eBoxBlur(горизонтальное [1..100], вертикальное [1..100])
// Горизонтальное размытие
eBoxBlur(100, 1)
// Вертикальное размытие
eBoxBlur(1, 100)
// Размытие по обоим направлениям
eBoxBlur(20, 20)
Поиск граней
Применяет эффект выделения границ по четырём известным операторам (Робертса, Прюитт, Собеля, Шарра). Кроме того, результат можно получить в виде цветных граней, чёрно-белых граней и в виде наложения граней на исходное изображение.
eEdgeDetection(оператор [0..3], режим [0..2])
Оператор:
- 0 - Робертса
- 1 - Джудит Прюитт
- 2 - Собеля
- 3 - Шарра
Режим:
- Цветные грани
- Грани в оттенках серого
- Вычитание граней
// Оператор Роберста и чёрно-белые грани
eEdgeDetection(0, 1)
// Оператор Прюитт и цветные грани
eEdgeDetection(1, 0)
// Оператор Собеля и вычитание граней
eEdgeDetection(2, 2)
// Оператор Шарра и чёрно-белые грани
eEdgeDetection(3, 1)
Разброс пикселей
Применяет эффект разброса пикселей по двум направлениям.
eScatter(горизонтальный [1..100], вертикальный [1..100])
// Горизонтальный разброс
eScatter(40, 1)
// Вертикальный разброс
eScatter(1, 80)
// Разброс по обоим направлениям
eScatter(20, 20)
Наложение шума
Накладывает на изображение шум — цветные или чёрно-белые точки.
eNoise(степень наложения [1..255], монохромный [0..1])
// Наложение цветного шума
eNoise(100, 0)
// Наложение чёрно-белого шума
eNoise(150, 1)
Ядро свёртки
Применяет матрицу свёртки к изображению. Эффект подобен функции imageconvolution, только не ограничен в размере матрицы. Благодаря этому, можно получить самые различные эффекты.
eConvolution(ширина матрицы, высота матрицы, матрица (массив), делитель, смещение, режим учёта границ [0..1])
Матрица задаётся не в виде массива массивов, как это есть в стандартной функции imageconvolution, а в одном массиве:
eConvolution(5, 3, array( 0, 0, 1, 0, 0, 1, 2,-8, 2, 1, 0, 0, 1, 0, 0), ...);
Если делитель указать равным нулю, то он будет автоматически рассчитан как сумма значений матрицы.
Смещение — прибавляет к каждой компоненте цвета заданное значение. Используется в случаях, когда необходимо нормализовать значения после применения ядра свёртки.
Режим учёта границ:
- 0 — на граничных позициях будет взято значение 0;
- 1 — на граничных значениях будет взято значение текущего пикселя.
// Резкость
eConvolution(3, 3, array(
0, -1, 0,
-1, 5, -1,
0, -1, 0), 0, 0, 1)
// Мягкая резкость (используются вещественные числа).
eConvolution(3, 3, array(
-1.2, -1, -1.2,
-1.0, 20, -1.0,
-1.2, -1, -1.2), 0, 0, 1)
// Размытие 5x5
eConvolution(5, 5, array(
1, 4, 7, 4, 1,
4, 16, 26, 16, 4,
7, 26, 41, 26, 7,
4, 16, 26, 16, 4,
1, 4, 7, 4, 1))
// Выдавливание
eConvolution(3, 3, array(
0, -1, 0,
1, 4, -1,
0, -1, 0), 0, 127, 1)
Наложение двух изображений
Наложение одного изображения на другое с различными режимами (как в Photoshop'e).
eImageBlend(изображение, x, y, режим наложения [0..19], прозрачность [0..255])
x, y — координаты, куда будет наложено изображение. Могут быть отрицательными, если необходимо наложить лишь часть изображения.
Режимы наложения отсортированы в том же порядке, что и в Photoshop:
- Обычный
- 0 - NORMAL - Обычный
- Группа затемнения
- 1 - DARKEN - Затемнение
- 2 - MULTIPLY - Умножение
- 3 - COLOR_BURN - Затемнение основы
- 4 - LINEAR_BURN - Линейный затемнитель
- Группа осветления
- 5 - LIGHTEN - Осветление
- 6 - SCREEN - Экран
- 7 - COLOR_DODGE - Осветление основы
- 8 - LINEAR_DODGE - Линейный осветлитель
- Группа увеличения контрастности
- 9 - OVERLAY - Перекрытие
- 10 - SOFT_LIGHT - Мягкий свет
- 11 - HARD_LIGHT - Жесткий свет
- 12 - VIVID_LIGHT - Яркий свет
- 13 - LINEAR_LIGHT - Линейный свет
- 14 - PIN_LIGHT - Точечный свет
- 15 - HARD_MIX - Жесткое смешение
- Группа сравнения
- 16 - DIFFERENCE - Разница
- 17 - EXCLUSION - Исключение
- 18 - SUBTRACT - Вычитание
- 19 - DIVIDE - Разделить
- Обычный
Прозрачность — необязательный параметр, по умолчанию равный 255. Аналог параметра Непрозрачность в Photoshop, только измеряется не в процентах, а в числах от 0 до 255.
// Наложение картинки flower.png по всей площади
// изображения $source с различными режимами наложения
$flower = PPMage::fromFile('flower.png')->getImage();
$source = PPMage::fromFile('lena.jpg');
$srcW = $source->getImage()->getWidth();
$srcH = $source->getImage()->getHeight();
$stepY = $flower->getHeight() * 1.1;
$stepX = $flower->getWidth() * 0.9;
$count = 0;
for ($y = -20; $y < $srcH; $y += $stepY) {
for ($x = -40; $x < $srcW; $x += $stepX) {
$source = $source->eImageBlend($flower, $x, $y, $count % 20, 128);
$count++;
}
}
$image = $source->getImage();
// Наложение картинки flower.png с прозрачностью 128
$flower = // ...
// аналогично...
$source = $source->eImageBlend($flower, $x, $y, $count % 20, 128);
$image = $source->getImage();