Есть ли что-то уникальное для файлов JPG, чтобы я мог копировать дубликаты? - PullRequest
0 голосов
/ 21 октября 2010

Я хочу сделать пример приложения WinForm C # для поиска дубликатов фотографий на моем ноутбуке.
У меня вопрос, есть ли какая-нибудь запись, тег, данные Exif или что-то еще, что является уникальным для файла JPG (фото).
Так что я могу читать эти данные, помещенные в набор данных, и искать дубликаты.

Ответы [ 5 ]

2 голосов
/ 21 октября 2010

Почему бы не использовать контрольную сумму для файла? создайте хеш-таблицу для всех файлов, которые вы отсканировали с контрольной суммой в качестве ключа

2 голосов
/ 21 октября 2010

Можно сказать, что данные Exif уникальны. Эта таблица дает вам хорошее резюме того, что получить из Exif Data: http://en.wikipedia.org/wiki/Exchangeable_image_file_format#Example

Посмотрите на этот проект, уверен, что код поможет вам:

http://jpegdata.codeplex.com/

В этом вопросе stackoveflow есть хороший ответ для получения данных Exif:

«Если вы компилируете с версией v3 платформы (или более поздней), вы можете загрузить изображения с помощью класса BitmapSource, который предоставляет метаданные EXIF ​​через свойство Metadata»

Тем не менее, я бы сравнил имя и дату, и этого должно быть достаточно.

1 голос
/ 21 октября 2010

Если вы хотите пойти по пути хеширования, взгляните на этот вопрос .

1 голос
/ 21 октября 2010

Вы можете прочитать в картинках побайтно и сравнить их.Если они не совпадают, прекратите чтение.

Как-то так.Это довольно расплывчато, но вы поймете идею.

while (match && !end)
{
    b1 = getnexctbytefromfilefirstfile();
    b2 = getnextbytefromfilesecondfile();

    if(b1 != b2)
    {
        match = false;
    }

    if(b1 == null || b2 == null)
    {
        end = true;
    }
}
1 голос
/ 21 октября 2010

Я бы просто сравнил свойства и, если они все совпадают, хэшировал содержимое и сравнивал.

...