Также рассмотрите [Практический Python] ( http://www.cs.luc.edu/~anh/python/hands - на/). Это используется в качестве основного текста для Информатики 150 в Университете Лойола. Это - краткое введение к Python при подчеркивании хорошего стиля программирования и дизайна.
Если вы ищете строку "Exif", вы найдете начало данных Exif - это довольно сложно, и я бы рекомендовал использовать библиотеку - (например, моя компания DotImage , если вы использовали .NET).
Вот описание высокого уровня:
Сам Exif находится внутри AppMarker - три байта до него будут E1 (AppMarker 1), а размер данные маркера в порядке байтов файла. Через два байта после Exif вы увидите маркер порядка байтов (например, 49 49
означает II
, что означает Intel, прямой порядок байтов - это означает, что в двухбайтовых числах младший байт находится первым в файл).
В остальных данных широко используются смещения, смещение отсчитывается от местоположения первого байта порядка байтов (49 в приведенном выше случае)
8 байтов от этого смещения - это 2-байтовое число, которое представляет собой количество тегов exif. Если вы находитесь в порядке байтов II
, переверните байты, чтобы прочитать длину.
Тогда будет это количество 12-байтовых записей. Каждый из них:
2 bytes: Tag ID
2 bytes: Tag Type
4 bytes: Length
4 bytes: data if the data is 4 bytes or less, or an offset to the data
После N 12-байтовых записей у вас будут данные, на которые указывает каждое смещение, используемое в вышеуказанных N записях. Вам нужно найти идентификаторы и типы, чтобы увидеть, что они означают и как представлены.
В Википедии есть несколько указателей на то, как и где именно данные EXIF хранятся в файле. Конечно, всегда есть сам стандарт , который нужно прочитать.
Это одна из хороших библиотек для Java и EXIF: http://www.drewnoakes.com/code/exif/
Анализировать данные EXIF довольно утомительно, но вы можете найти множество библиотек для их анализа. Мой любимый вариант для Java -
http://www.java2s.com/Open-Source/Java-Document/Web-Server/Jigsaw/org/w3c/tools/jpeg/Exif.java.htm