@JohnDidact
Нуб во всём

Как лучше сравнить два файла изображения?

Цель: получаю удаленное изображение, сохраняю локально. Потом это изображение ежеминутно сравниваю с удаленным. Если они разные, то далее делаю определенные действия.
Нужно сравнивать не то, что изображено на картинке, а всё: формат, размеры, качество и т.д. Проще говоря, сам файл. Нужно сделать это всё максимально быстро и с минимальными затратами. Изображения, в среднем, размером 50x50. Сейчас сравниваю обычным file-get-contents() оператором сравнения. Напрягает лично меня то, что нужно открывать http протокол (когда получаю содержимое удалённого файла), ну и само сравнение не малого текста. Думал сравнивать хэши, но ведь чтобы получить хэш, нужно всё равно открыть http, прочитать каждый символ. Потом ещё и захэшировать... Ещё больше затрат. Или я может чего-то неправильно понимаю? В общем, что посоветуете?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Фишка хэширования в том, что вы считаете его ровно один раз, и при повторном сравнении уже оперируете им, а не содержимым файла.
У вас есть 1 млн. файлов. При получении каждого файла вы подготовили для него хэш и сохранили этот хэш в отдельном массиве в оперативной памяти, в файле на диске или в таблице базы данных.
Когда поступит следующий файл, то вы от него тоже получите хэш, но при сравнении вам уже не надо вычитывать 1 млн. файлов, чтобы сделать сравнение, достаточно обратиться к более быстрому источнику за хэшами этих файлов, сравнение которых будет короче и перебор быстрее (если эта база данных, то должны использоваться индексы, если оперативная память, то сбалансированные деревья и бинарный поиск и т.п.).
Ответ написан
@rPman
В http стандарте есть заголовки, отвечающие за размер и время изменения файла
посмотрите на ваш файл в своей программе или с помощью утилит curl -I http://.... сам файл при этом не загружается.

Такие заголовки как Content-Length или Date или ETag, не всегда они есть но если они есть и изменились - значит файл изменился, иначе загружать весь не обязательно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 09:29
2500 руб./за проект
25 апр. 2024, в 09:27
4000 руб./за проект
25 апр. 2024, в 09:20
10000 руб./за проект