PPMage — lightweight PHP library for applying effects to images.

Demo

An example of the library can be found on this page.

Updates

Usage

include_once('ppmage/PPMage.php');
$image = PPMage::fromFile('source.jpg')->
        // Applying effects
        eInvert(1, 1, 1, 0)->
        eBoxBlur(5, 5)->
        eExtractChannel(2, 0)->
        eInvert(0, 1, 0, 0)->
        // Getting result image
        getImage();
// Saviing to file
imagejpeg($image->getData(), 'result.jpg', 85);
// Or show as base64
echo '<img src="data:image/png;base64,', $image->exportAsBase64(), '" alt="base64_image" />';
// Retrieving an image information
echo '
Size: ', $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])

// извлекает красный канал
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-коррекция

// RGB коррекция с изменением прозрачности
eRGBCorrection(-255, -140, 217, -180)

ARGB-коррекция

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

// Оператор Роберста и чёрно-белые грани
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])

// Резкость
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))

Размытие 5x5

// Выдавливание
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])

// Наложение картинки 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();

Полупрозрачное наложение изображения