Как получить данные EXIF ​​из файла с помощью C# [закрыто]

StackOverflow https://stackoverflow.com/questions/58649

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хотел бы написать небольшую программу на C #, которая просматривает мои фотографии в формате JPEG и, например, сортирует их по датированным папкам (используя МОИ соглашения о датировке, черт возьми...).

Кто-нибудь знает относительно простой способ программно получить данные EXIF, такие как дата и время или экспозиция?Спасибо!

Это было полезно?

Решение

Проверьте это экстрактор метаданных. Он написан на Java, но также портирован на C#. Я использовал версию Java для написания небольшой утилиты для переименования моих файлов JPEG на основе тегов даты и модели.Очень прост в использовании.


РЕДАКТИРОВАТЬ экстрактор метаданных также поддерживает .NET.Это очень быстрая и простая библиотека для доступа к метаданным изображений и видео.

Он полностью поддерживает Exif, а также IPTC, XMP и многие другие типы метаданных из типов файлов, включая JPEG, PNG, GIF, PNG, ICO, WebP, PSD, ...

var directories = ImageMetadataReader.ReadMetadata(imagePath);

// print out all metadata
foreach (var directory in directories)
foreach (var tag in directory.Tags)
    Console.WriteLine($"{directory.Name} - {tag.Name} = {tag.Description}");

// access the date time
var subIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime);

Это доступно через NuGet и код на GitHub.

Другие советы

Как было предложено, вы можете использовать какую-либо стороннюю библиотеку или сделать это вручную (что не так уж и сложно), но самым простым и гибким является использование встроенных функций .NET.Подробнее см.:

Я говорю «он самый гибкий», потому что .NET не пытается каким-либо образом интерпретировать или объединять данные.Для каждого EXIF ​​вы получаете массив байтов.Это может быть хорошо или плохо в зависимости от того, какой уровень контроля вам действительно нужен.

Кроме того, я должен отметить, что список свойств на самом деле не соответствует напрямую значениям EXIF.Сам EXIF ​​хранится в нескольких таблицах с перекрывающимися идентификаторами, но .NET помещает все в один список и переопределяет идентификаторы некоторых элементов.Но пока вас не волнуют точные идентификаторы EXIF, у вас все будет в порядке с сопоставлением .NET.

Вот ссылка на другой аналогичный вопрос SO, в котором есть ответ, указывающий на эту хорошую статью о «Чтение, запись и метаданные фотографий» в .Net.

Вы можете использовать Библиотека тегов# который используется такими приложениями, как F-точка.Помимо Exif, он читает большое количество форматов метаданных для изображений, аудио и видео.

Мне также нравится ExifUtils API, но он глючный и активно не развивается.

Класс изображения имеет свойства PropertyItems и PropertyIdList.Вы можете использовать их.

Получение данных EXIF ​​из изображения JPEG включает в себя:

  1. Ищем маркеры JPEG, в которых упоминается начало данных EXIF.напримеробычно oxFFE1 — это маркер, вставленный при кодировании данных EXIF, который представляет собой сегмент APPlication, куда передаются данные EXIF.
  2. Проанализируйте все данные, скажем, от 0xFFE1 до 0xFFE2.Эти данные будут представлять собой поток байтов в файле в формате JPEG.
  3. ASCII-эквивалент этих байтов будет содержать различную информацию, связанную с датой изображения, названием модели камеры, экспозицией и т. д.

Инструмент командной строки ExifTool от Фила Харви работает с десятками форматов изображений, включая множество собственных форматов RAW, и может работать с различными форматами метаданных, включая EXIF, GPS, IPTC, XMP, JFIF.

Очень простое в использовании, легкое, впечатляющее приложение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top