Несмотря на то, что WPF предоставляет эти API, они не очень дружелюбны и не особенно быстры. Я подозреваю, что они много взаимодействуют.
Я поддерживаю простую библиотеку с открытым исходным кодом для извлечения метаданных из изображений и видео. Это 100% C # без P / Invoke.
// 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 orientation
var orientation = subIfdDirectory?.GetInt(ExifDirectoryBase.TagOrientation);
switch (orientation)
{
case 6:
return 90D;
case 3:
return 180D;
case 8:
return 270D;
}
В моих тестах это в 17 раз быстрее, чем в WPF API. Если вы хотите использовать только Exif из JPEG, используйте следующее, и оно более чем в 30 раз быстрее:
var directories = JpegMetadataReader.ReadMetadata(stream, new[] { new ExifReader() });
Библиотека извлечения метаданных доступна через NuGet и коды на GitHub .
Благодарность за счет многих участников, которые помогли проекту с момента его начала в 2002 году.