Сверяем две картинки и ищем процент их совпадения.
Напишем простую систему проверки на совпадения двух картинок.
Похожую систему придумали для защиты админ зоны форума ipb(модификация). Работала она так – администратор загружал картинку с компьютера а система сверяла его со своей картинкой. Если две картинки совпадали на 100%, то вход совершался. Мы не будем писать подобную защиту, а просто рассмотрим, как это работает.
Начнем писать функцию открытия и разбора двух картинок:
function get_colors($location) {
$image = imagecreatefromjpeg($location);
$size = getimagesize($location);
for ($w = 1; $w < $size[0]; $w++) {
for ($h = 1; $h < $size[1]; $h++) {
$colors[$w."x".$h] = imagecolorat($image, $w, $h);
}
}
imagedestroy($image);
return $colors;
}
imagecreatefromjpeg открывает картинку формата jpg. Getimagesize получает размер картинки. Imagecolorat — Получает индекс цвета пикселя.
Теперь сверяем:
function check_images($colors1, $colors2) {
$ok = 0;
$pixels1 = sizeof($colors1);
$pixels2 = sizeof($colors2);
if ($pixels1 != $pixels2) {
return false;
}
foreach ($colors1 as $key => $value) {
if (isset($colors2[$key]) && $colors2[$key] == $value) {
$ok++;
}
}
$new_percent = ($ok / $pixels1) * 100;
return round($new_percent, 2);
}
sizeof – посчитать количество свойств объекта. Дальше всё сверяет, преобразовывает в проценты и округляет получившееся число.
Теперь применим эти две функции:
$image1 = get_colors(“image1.jpg”);
$image2 = get_colors(“image2.jpg”);$result = check_images($image1, $image2);
Думаю тут всё понятно…
И отобразим результат на экран:
if ($result) {
echo ($result > 70) ? “Картинки одинаковые” : “Картинки разные”;
echo “<br />\n”;
echo “Процент совпадения: “.$result.”%”;
}
Если совпадение больше чем на 70 процентов, то выведет “ Картинки одинаковые ”, если нет, то “Картинки разные”.
Используемые функции:
Imagecreatefromjpeg — Создает новое изображение из файла.
Getimagesize получает размер картинки
Imagecolorat — Получает индекс цвета пикселя.
Sizeof – посчитать количество свойств объекта





Добавить комментарий
Вы должны войти