PHP « Сравнение 2 картинок средствами PHP

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

UPD: скорее всего нужно сравнивать и картинки после ресайза, т.е. нужно и "визуальное" сравнение, поскольку к товару все равно будут отображаться превьюшки изображений, которые будут иметь одинаковые размеры, а следовательно - и визуально будут похоже.

1 ответов


Если я правильно понял вопрос, то автора интересует визуальное "сравнение" картинок на "похожесть".

На данный момент мне не известны такие разработки именно на PHP, которые бы были на сколько мощным процессором изображения что бы выполнять такие функции.

Есть достаточно распространенный алгоритм с использованием ImageMagic, который, конечно же далек от идеала, но в целом похожие картинки распознает. Алгоритм работает на базе "упрощения" изображения. Сжимает его до определенного размера (16х16 к примеру), фильтрует цвета, и вуаля. Побитовое сравнение даст практически нужный результат.


try $image->Sample("160x160!");
try $image->Modulate(saturation=>-100);
try $image->Blur(radius=>3,sigma=>99);
try $image->Normalize();
try $image->Equalize();
try $image->Sample("16x16");
try $image->Threshold();
try $image->Set(magick=>'mono');
($blob) = $image->ImageToBlob();
 

Если такой упрощенный вариант не подходит, следует копнуть в сторону системных (платформенных) программ или надстроек.
Так, к примеру, findimagedupes работает с командной строки. И судя по иписанию может делать очень глубокий анализ.

Самое простое это считать хеш для файла.



Если необходимо избежать дублирования полностью одинаковых файлов, то можно опираться на контрольные суммы (CRC) http://ru.wikipedia.org/wiki/CRC.


Есть такой поисковик — tineye.com — покопайся в АПИ, найдешь все похожие картинки, хоть 10 раз их ресайзь.


по размеру файла