У меня есть более 1,3-миллилитровые изображения, которые мне приходится сравнивать друг с другом, и добавляется несколько сотен в день.
Моя компания принимает образ и создает версию, которая может быть использована нашими поставщиками.
Файлы часто очень похожи друг на друга, например, две разные компании могут отправлять нам два разных изображения: JPG и GIF, как с логотипом McDonald, так и месяцы между представлениями.
То, что происходит, заключается в том, что в конце мы создаем два разных раза один и тот же логотип, когда мы можем просто скопировать / вставить уже созданный или, по крайней мере, предложить его в качестве возможной отправной точки для художников.
Я искал алгоритмы для создания отпечатка пальца или что-то, что позволит мне сделать простой запрос при загрузке нового изображения, время относительно не является проблемой, если для создания отпечатка пальца требуется 1 секунда, потребуется 150 дней создайте отпечатки пальцев, но это будет очень важно для экономии, чтобы мы могли даже получить 3 или 4 сервера.
Я свободно владею PHP, но если алгоритм находится в псевдокоде или даже CI может его прочитать и попытаться перевести (если он не использует некоторые C-специфические библиотеки)
В настоящее время я делаю MD5 всех изображений, чтобы поймать те, которые являются точно такими же, этот вопрос возник, когда я думал сделать изменение размера изображения и запустить md5 на измененном изображении, чтобы поймать те, которые были сохранены в другом формате и изменены, но тогда у меня все равно не будет достаточно хорошего признания.
Если бы я не упоминал об этом, я буду доволен тем, что просто предлагает возможные «похожие» образы.
РЕДАКТИРОВАТЬ
Имейте в виду, что проверка должна выполняться несколько раз в минуту, поэтому лучшее решение – это то, которое дает мне некоторые значения для изображения, которые я могу хранить и использовать в будущем, чтобы сравнить с изображением, на которое я смотрю, без необходимости повторное сканирование всего сервера.
Я читаю несколько страниц, в которых упоминаются гистограммы или изменяются размеры изображения до очень небольшого размера, можно разбить возможные теги, а затем преобразовать их в оттенки серого, сделать хэш этих файлов и использовать их для сравнения. Если я буду успешным, я отправлю код / ответ здесь
Попробуйте использовать file_get_contents и: http://www.php.net/manual/en/function.hash-file.php
Если хэши совпадают, то вы знаете, что они точно такие же.
EDIT: если возможно, я думаю, что хранение хэшей изображения, а путь изображения в таблице базы данных может помочь вам ограничить нагрузку на сервер. Гораздо проще запустить алгоритм хэширования на ваших исходных изображениях и сохранить хэш в таблице … Затем, когда новые изображения отправляются, вы можете хешировать изображение, а затем выполнять поиск в таблице базы данных. Если хэш уже существует, отбросьте его. Вы можете использовать хеш в качестве индекса таблицы, и, как только вы найдете совпадение, вам не нужно проверять остальное.
Другой вариант – не использовать базу данных … Но тогда вам придется всегда искать. Это проверка хэша входящего изображения, а затем запуск в памяти временного поиска по всем сохраненным изображениям.
РЕДАКТИРОВАТЬ # 2: Пожалуйста, просмотрите решение здесь: Сравнение изображений – быстрый алгоритм
Аналогичный вопрос для вас уже существует, проверьте его, если он работает для вас: Сравните 2 изображения в PHP
Существует расширение PHP ImageMagick, которое вы можете использовать.
Чтобы ускорить процесс, отсортируйте все файлы с размером и сравните внутренности только в том случае, если два размера равны. Для сравнения внутренних данных использование хэш-сравнения также является самым быстрым способом. Надеюсь это поможет.