V předchozím příspěvku jsme diskutovali o tom, jak nakládat s EXIF daty obrázků v Java. Zde se dnes podíváme na dosažení stejného, ale v C#. Pokud jste nenavštívili poslední příspěvek, ale chcete extrahovat, aktualizovat, přidávat nebo odstraňovat EXIF data vašich obrázků programově v C#, pak vás tento článek provede tímto. Probereme následující způsoby manipulace s EXIF daty v C#:
- Přečtěte si EXIF data
- Přečtěte si všechny EXIF tagy z obrázku
- Aktualizujte vlastnosti EXIF
- Odstraňte metadata EXIF
Správa metadat Knihovna C#
GroupDocs.Metadata for .NET je rozhraní .NET API pro správu metadat. Má dlouhý seznam funkcí pro širokou škálu podporovaných formátů souborů. Má schopnost nejen extrahovat metadata z obrázků, ale také může přidávat, upravovat, aktualizovat a odstraňovat metadata z obrázků a dokumentů s různými možnostmi.
V tomto článku použijeme toto API, takže si prosím stáhněte jeho binární soubory nebo nainstalujte API z NuGet.
Číst EXIF data z obrázků v C#
Vlastnosti EXIF dat můžete snadno přečíst podle uvedených kroků. Počínaje extrakcí EXIF dat z tohoto obrázku, 93m vysoké Sochy svobody. Zde jako příklad obrázku použijeme soubor JPG, ale můžeme použít jakýkoli soubor, ať už je to PNG, WebP, BMP, GIF, TIFF nebo jakýkoli jiný z podporovaných formátů souborů uvedených na konci tento článek.
- Načtěte zdrojový soubor obrázku obsahující informace o datech EXIF pomocí konstruktoru třídy Metadata.
- Získejte jeho kořenový balíček voláním metody GetRootPackage().
- Z kořenového balíčku získejte jeho ExifPackage z jeho vlastnosti ExifPackage.
- Jakmile máte balíček EXIF, můžete nyní přistupovat k vlastnostem EXIF obrázku; jako Make, Model, Width, Length, DateTime, Copyright, Software, atd., jak je uvedeno níže v příkladu kódu C#.
// Extract EXIF Data Package Information from image in C#
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null && root.ExifPackage != null)
{
Console.WriteLine(root.ExifPackage.Make);
Console.WriteLine(root.ExifPackage.Model);
Console.WriteLine(root.ExifPackage.ImageWidth);
Console.WriteLine(root.ExifPackage.ImageLength);
Console.WriteLine(root.ExifPackage.DateTime);
}
}
Výše uvedený kód zobrazí následující dostupné EXIF informace poskytnutého obrázku JPG.
Make : NIKON CORPORATION
Model : NIKON D7200
Width : 640
Length : 384
DateTime : 2018:07:06 19:31:05
Čtení EXIF IFD a GPS informací o snímku
Data EXIF také zahrnují informace Exif IFD (Image File Directory) a GPS (Global Positioning System). Nyní pro informace o IFD a GPS balíčku, stačí mít přístup k příslušným vlastnostem EXIF balíčku, tj. ExifIfdPackage nebo GpsPackage. Z těchto balíčků můžete získat mnohem více informací, než je uvedeno níže:
- Sériové číslo zařízení
- Jméno vlastníka fotoaparátu
- Vzor CFA
- Rychlost
- Směr obrazu
- Datum razítko
- Informace o oblasti
- Nadmořská výška
- Zeměpisná šířka
- Zeměpisná délka
- atd.
Níže uvedený kód lze přidat do vaší výše uvedené metody pro zobrazení dat EXIF spolu s informacemi IFD a GPS.
// Display EXIF IFD Package Properties like Serial Number and Camera Owner.
Console.WriteLine(root.ExifPackage.ExifIfdPackage.BodySerialNumber);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.CameraOwnerName);
Console.WriteLine(root.ExifPackage.ExifIfdPackage.UserComment);
// Display EXIF GPS Information like Latitude, Longitude, etc.
Console.WriteLine(root.ExifPackage.GpsPackage.Altitude);
Console.WriteLine(root.ExifPackage.GpsPackage.LatitudeRef);
Console.WriteLine(root.ExifPackage.GpsPackage.LongitudeRef);
Přečtěte si všechny EXIF tagy obrázků v C#
Můžete extrahovat všechny vlastnosti EXIF jakéhokoli obrázku, můžete to udělat téměř podobným způsobem jako výše:
- Načtěte obrázek pomocí konstruktoru Metadata.
- Získejte kořenový balíček voláním metody GetRootPackage().
- Získejte balíček EXIF z vlastnosti ExifPackage kořenového balíčku.
- Iterujte balíček EXIF a získejte požadované páry název-hodnota.
- Podobně si pořiďte balíčky IFD a GPS, aby zobrazovaly své klíče a hodnoty.
// Extract all EXIF Metadata from the image
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null && root.ExifPackage != null)
{
const string pattern = "{0} = {1}";
// Read all EXIF Package Tags and values.
foreach (TiffTag tag in root.ExifPackage.ToList()) {
Console.WriteLine(pattern, tag.Name, tag.Value);
}
// Read all EXIF IFD Package Tags and values.
foreach (TiffTag tag in root.ExifPackage.ExifIfdPackage.ToList()) {
Console.WriteLine(pattern, tag.Name, tag.Value);
}
// Read all EXIF GPS Package Tags and values.
foreach (TiffTag tag in root.ExifPackage.GpsPackage.ToList()) {
Console.WriteLine(pattern, tag.Name, tag.Value);
}
}
}
Aktualizujte vlastnosti EXIF v C#
Stávající EXIF data libovolného obrázku můžete snadno změnit. Níže jsou uvedeny kroky, které můžete provést:
Aktualizujte balíček EXIF
- Získejte kořenový balíček voláním metody GetRootPackage().
- Nastavte vlastnosti ExifPackage přiřazením nových hodnot odpovídajícím vlastnostem, jako je přiřazení nové hodnoty:
- root.ExifPackage.Copyright - pro nastavení aktualizovaných informací o autorských právech.
- Podobně můžete nastavit hodnoty pro umělce, značku, model, software, šířku a výšku obrázku, datum a čas atd.
Aktualizujte balíček EXIF IFD
Podobně jako u nastavení vlastností balíčku EXIF můžeme aktualizovat vlastnosti balíčků EXIF IFD a GPS.
- Přiřaďte hodnotu root.ExifPackage.ExifIfdPackage.CameraOwnerName pro nastavení vlastníka fotoaparátu.
Můžete navštívit kurzy ExifIfdPackage nebo ExifGpsPackage, abyste získali představu o tom, do jaké míry můžete upravit své obrázky.
// Update or change new values in EXIF Data (EXIF Package & EXIF IFD Package).
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null)
{
// Set the EXIF package if it is missing
if (root.ExifPackage == null) {
root.ExifPackage = new ExifPackage();
}
// Setting the desired values in EXIF Package and EXIF IFD Package.
root.ExifPackage.Copyright = "Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.";
root.ExifPackage.ImageDescription = "Statue of Liberty for EXIF Data";
root.ExifPackage.Software = "GroupDocs.Metadata for .NET";
root.ExifPackage.ExifIfdPackage.BodySerialNumber = "GD-2020";
root.ExifPackage.ExifIfdPackage.CameraOwnerName = "GroupDocs";
root.ExifPackage.ExifIfdPackage.UserComment = "Nice image captured in 2018";
metadata.Save("statue-of-liberty-updated.jpg");
}
}
Odebrat metadata EXIF z obrázků v C#
Pokud chcete odstranit EXIF balíček z libovolného souboru, stačí nastavit jeho vlastnost ExifPackage na null.
// Removing the EXIF data from an image.
using (Metadata metadata = new Metadata("statue-of-liberty.jpg"))
{
IExif root = metadata.GetRootPackage() as IExif;
if (root != null)
{
root.ExifPackage = null;
metadata.Save("statue-of-liberty-no-exif.jpg");
}
}
Podporované obrázky a další formáty
Toto jsou aktuálně podporované formáty souborů GroupDocs.Metadata pro informace o datech EXIF obrázků, zvuků a videí. Aktualizované informace můžete vždy navštívit dokumentace.
Typ dokumentu | Formáty souborů |
---|---|
Obrázky | BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF |
Audio & Video | MP3, WAV, AVI, MOV / QT, FLV, ASF, DICOM |
Další informace o GroupDocs.Metadata
- Dokumentace - .NET | Java
- Příklady zdrojového kódu
- Reference API
- GroupDocs.Metadata – Řešení pro správu metadat
Pojďme si promluvit více @ Free Support Forum.