В PHP есть замечательная библиотека GD для примитивной обработки несложной графики. Но библиотека предоставляет лишь базовые функции обработки изображений.
Представляю вашему вниманию класс, который реализует более расширеные функции для работы с изображениями.
Автор класса 29 летний Артур Гранижевский из Польши.
Лицензия: LGPL
В настоящее время классом реализовано:
- Использование преобразований Хафа для обнаружения косых углов и устранения перекоса изображений
- Распознавание цвета фона изображения
- Распознавания текста в изображениях (OCR), как пример, использование для распознавания капчи
- Кадрирование изображения с реальным сохранением пропорций
- Удаление шума из изображения
- Поворот и масштабирование изображения с автоматическим распознаванием и заливкой цветом её основного фона
- Генерация гистограммы
- Шумоподавление
- Расчет яркости (интенсивности) пикселя, оттенок, насыщенность и chromacity из цветов RGB в трех различных цветовых режимах (HSL, HSI, HSV)
- Изменение оттенка изображения
- Изменение яркости изображения
- Изменение насыщенности изображения
- Создание High-Definition-Range (HDR) изображений
- Использование самых современных программируемых пиксельных шейдеров
- Применение экспериментального эффекта размытия с настраиваемым размером ядра
- Слияние двух изображений с использованием восьми различных режимов смешивания:
- помимо (addition)
- разделить (divide)
- вычитание (subtract)
- затемнить (darken)
- облегчить (lighten)
- разность (difference)
- умножение (multiply)
- прозрачность (opacity)
От слов к делу:
Удаление шума с картинки
<?php
require_once('../gd2imaging.php');
$image = new Image('noise.PNG');
$image->useMedian();// Использование по умолчанию 3x3 матрицы
$image->show();
?>
<?php
require_once('../gd2imaging.php');
$image = new Image('noise.PNG');
$image->useMedian(7, 7);// Использование 7x7 матрицы
$image->show();
?>
Трансформация Хафа
<?php
require_once('../gd2imaging.php');
$image = new Image('test4.PNG');
$image->getSkewAngle(
8, // Определять до 8 различных углов
256, // использование 256x256 матрицы
true // рисовать линии Хафа (режим отладки)
);
$image->show();
?>
Автоматический разворот текста горизонтально
<?php
require_once('../gd2imaging.php');
$image = new Image('test4.PNG');
$image->deskew();
// повернуть на 90 градусов после deskew,
// потому что текст должен располагаться горизонтально, а не вертикально
// (метод не определяет направление текста)
$image->rotate(90);
$image->show();
?>
Поворот изображения и автоматическое распознавание фона изображения с заливкой фона
<?php
require_once('../gd2imaging.php');
$image = new Image('blue.png');
// поворачиваем изображение на 45 градусов
// и автоматически определяем цвет фона
// в данном случае получаем синий цвет фона
$image->rotate(45);
$image->show();
// вы можете считать значение цвета фона в переменную
$color = $image->getBackgroundColor();
?>
Получение гистограммы изображения
<?php
require_once('../gd2imaging.php');
$image = new Image('plain.jpg');
$histogram = $image->getHistogram();
$histogram->show();
?>
Распознавание текста
<?php
require_once('../gd2imaging.php');
// Загрузка изображения с алфавитом
$charsImage = new Image('alphabet.png');
// установка размеров отдельных букв
$charSize = new Dimensions(26, 25);
// создание квантизатора
$quantizator = new Quantizator();
foreach(range('A', 'Z') as $index => $char) {
// обработка изображения текущим символом (буквой)
$charImage = $charsImage->getSubImage(new Point($index * 26, 0), $charSize);
// добавление вектора дляколлекции
$quantizator->addGlyph($charImage->getVector(), $char);
}
// загрузка изображения с текстом для чтения
$image = new Image('text.png');
$text = "";
$lastObject = null;
// попытка найти все объекты(буквы) на картинке
foreach($image->findObjects() as $object) {
// поиск пробелов
if($lastObject && $object->getPosition()->x - $lastObject->getPosition()->x > $object->getDimensions()->width * 1.5) {
$text .= ' ';
}
$lastObject = $object;
$search = $object->resize($charSize, true)->getVector();
$result = $quantizator->findNearestEuklid($search);
$text .= $result[0];
}
echo "Найдено: <strong>".$text."</strong><br>";
?>
Чтение каптчи
<?php
// загрузка изображения с алфавитом
$charsImage = new Image('alphabet.png');
// установка размеров букв алфавита
$charSize = new Dimensions(26, 25);
// Создание квантизатора
$quantizator = new Quantizator();
foreach(array_merge(range('A', 'Z'), range(1, 9)) as $index => $char) {
// обработка изображения текущим символом
$charImage = $charsImage->getSubImage(new Point($index * 26, 0), $charSize);
// добавление вектора в коллекцию
$quantizator->addGlyph($charImage->getVector(), $char);
}
// загрузка изображения капчи
$image = new Image('captcha.gif');
// инвертировать цвета каптчи и удаление всего шума с него
$image->toNegative()->useMedian();
$text = '';
$lastObject = null;
// попытка найти символы на капче
foreach($image->findObjects() as $object) {
$lastObject = $object;
$search = $object->resize($charSize)->getVector();
$result = $quantizator->findNearestEuklid($search);
$text .= $result[0];
}
echo 'Каптча: <strong>'.$text.'</strong><br>';
?>
Изменение цветового тона
<?php
require_once('../gd2imaging.php');
$image = new Image('bird.png');
$image->setHue(180); // 180 градусов
$image->show();
?>
Изменение насыщенности
<?php
require_once('../gd2imaging.php');
$image = new Image('hawaii.jpg');
// Засвечивание на 140%
$image->setLuminance(1.4);
// Устанавливаем насыщенность на 220%
$image->setSaturation(2.2);
$image->show();
?>
Ну вот вроде бы и все. Остальное можно смело найти в исходниках класса самостоятельно. Будут вопросы – пишите!









А где взять изображение с алфавитом?) ну или какое оно должно быть?
сами составляете алфавит из тех букв которые необходимо распознать