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#:

Správa metadat Knihovna C#

Metadata .NET API od GroupDocs

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.

Obrázek Liberty JPG pro data EXIF
  • 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

Pojďme si promluvit více @ Free Support Forum.

Související článek