beibehalten ich ein simple open-source library seit 2002 für Metadaten aus Bild/Video-Dateien zu extrahieren.
// 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);
In meiner Benchmarks, läuft dieser Code über 12-mal schneller als Image.GetPropertyItem
, und rund 17 mal schneller als die WPF JpegBitmapDecoder
/BitmapMetadata
API.
Es gibt eine Tonne zusätzlicher Informationen aus der Bibliothek wie Kameraeinstellungen (F-Stop, ISO, Verschlusszeit, Blitzmodus, Brennweite, ...), Bildeigenschaften (Abmessungen, Pixelkonfigurationen) und andere Dinge wie GPS-Positionen, Stichwörter, Copyright-Informationen, usw.
Wenn Sie nur an den Metadaten interessiert sind, dann ist die Verwendung dieser Bibliothek sehr schnell, da das Bild nicht dekodiert wird (zB Bitmap).Sie können Tausende von Bildern in wenigen Sekunden scannen, wenn Sie schnell genug Speicherplatz haben.
ImageMetadataReader
versteht viele Dateitypen (JPEG, PNG, GIF, BMP, TIFF, PCX, WebP, ICO, ...). Wenn Sie wissen, , die Sie mit JPEG zu tun haben, und Sie nur wollen Exif-Daten, dann können Sie den Prozess machen noch schneller mit den folgenden:
var directories = JpegMetadataReader.ReadMetadata(stream, new[] { new ExifReader() });
Die Metadaten-Extraktor Bibliothek ist verfügbar über NuGet und die code's on GitHub. Vielen Dank an all die großartigen Mitwirkenden, die im Laufe der Jahre die Bibliothek verbessert und Testbilder eingereicht haben.
Nach ein paar Tests habe ich herausgefunden, dass deine Antwort die beste ist. Vielen Dank. – Sergio
Jetzt nur, wenn Sie eine Überprüfung durchgeführt hätten, um zu sehen, ob sie zuerst existiert. Es gibt immer eine Chance, die diese Eigenschaft nicht hat. –
Große Lösung! Die Eigenschaftsprüfung ist wichtig. Wenn Sie hinzufügen, wenn (myImage.PropertyIdList.Any (x => x == 36867)) als Ihre Überprüfung funktioniert es großartig! –