Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 26

/ вопрос открыт /

Создать программу, которая отыскивала бы одинаковые рисунки на жестком диске, даже если они имели бы разные названия

Котышева О А Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Котышева О А (статус: Посетитель)
Вопрос отправлен: 29 мая 2006, 13:11
Состояние вопроса: открыт, ответов: 4.

Ответ #1. Отвечает эксперт: Евгений В

В принципе можно, только не факт что этот способ сработает.
Можно например открывать каждый графический файл по очереди и проверять каждый его пиксель, сверяя его цвет с таким же по координатам цветом пикселя аналога.
Но, естественно, это будет ОООЧЕНЬ медленный процесс, да и к томуже он сработает только при полном соответствии пикселей оригинала и копии. С JPEG врятли сработает (сработает если это просто копия, а не заново сжатый файл) или если BMP и JPEG то врятли сработает (из за сжатия пиксели будут несовсем совпадать).

Хотя с другой стороны можно например продумать какие-то погрешности (максимально допустимые отклонения от полного соответствия), в этом случае в принципе может и нормально работать будет.

Ответ отправил: Евгений В (статус: 1-ый класс)
Время отправки: 29 мая 2006, 14:19
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: min@y™

Ладно, чего уж там! Чего велосипед-то изобретать? Написал я такую прогу. Работает она только с файлами *.jpg и делает примерно следующее:

1. В заданной папке и подпапках ищет все jpg-файлы.
2. Вычисляет CRC32 каждого файла и составляет список.
3. Отфильтровывает файлы с одинаковыми CRC32.
4. Копирует в заданную юзером папку все файлы, кроме дубликатов.

То, что только jpg - это не проблема, можно её заточить и под другие форматы.

Могу выслать exe и исходники или где-нить выложить.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 29 мая 2006, 15:41

Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович

min@y™ прав - нужно составлять таблицу хеш-значений, только не самого файла, как у него, а битовой матрицы - это сложнее, но будет лучше работать, ведь если у Вас есть два абсолютно одинаковых JPEG рисунка, но один с прогрессивной разверткой, а другой - нет - метод min@y™ не сработает. Итак, Вам нужно составлять таблицу вида Имя файла - Размер картинки - Hash.
Hash функцией может быть обыкновенный CRC, но это не лучший вариант в Вашем случае, можно поискать или даже придумать свою функцию, отражающую "сходство" образцов.
А если вам нужно простое решение - просто сравните размер файлов, отличающиеся значительно - разные, незначительно - подозрение, один размер - одинаковые.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 30 мая 2006, 02:30
Оценка за ответ: 4

Ответ #4. Отвечает эксперт: Бородинов Илья

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

Ответ отправил: Бородинов Илья (статус: 1-ый класс)
Время отправки: 30 мая 2006, 06:05


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:37
Выполнено за 0.03 сек.