С 2002 года я поддерживал простую библиотеку с открытым исходным кодом для извлечения метаданных из файлов изображений / видео.
// Read all metadata from the image
var directories = ImageMetadataReader.ReadMetadata(stream);
// Find the so-called Exif "SubIFD" (which may be null)
var subIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
// Read the DateTime tag value
var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTimeOriginal);
В моих тестах этот код работает в 12 раз быстрее, чем Image.GetPropertyItem
, и примерно в 17 раз быстрее, чем WPF JpegBitmapDecoder
/ BitmapMetadata
API.
В библиотеке доступно множество дополнительной информации, такой как настройки камеры (F-стоп, ISO, выдержка, режим вспышки, фокусное расстояние, ...), свойства изображения (размеры, конфигурации пикселей) и другие вещи, такие как как позиции GPS, ключевые слова, информация об авторских правах и т. д.
Если вас интересуют только метаданные, то использовать эту библиотеку очень быстро, поскольку она не декодирует изображение (то есть растровое изображение). Вы можете отсканировать тысячи изображений за несколько секунд, если у вас достаточно быстрое хранилище.
ImageMetadataReader
понимает многие типы файлов (JPEG, PNG, GIF, BMP, TIFF, PCX, WebP, ICO, ...). Если вы знаете , что имеете дело с JPEG, а вам только нужны данные Exif, то вы можете ускорить процесс с помощью следующего:
var directories = JpegMetadataReader.ReadMetadata(stream, new[] { new ExifReader() });
Библиотека извлечения метаданных доступна через NuGet и код на GitHub . Спасибо всем замечательным авторам, которые улучшили библиотеку и представили тестовые изображения за эти годы.