W poprzednim poście omówiliśmy, jak radzić sobie z danymi EXIF obrazów w Javie. Tutaj dzisiaj przyjrzymy się osiągnięciu tego samego, ale w języku C#. Jeśli nie odwiedziłeś ostatniego posta, ale chcesz programowo wyodrębnić, zaktualizować, dodać lub usunąć dane EXIF swoich obrazów w języku C#, ten artykuł przeprowadzi Cię przez to. Omówimy następujące sposoby manipulowania danymi EXIF w języku C#:

Biblioteka C# zarządzania metadanymi

Metadata .NET API przez GroupDocs

GroupDocs.Metadata for .NET to API .NET do zarządzania metadanymi. Ma długą listę funkcji dla szerokiej gamy obsługiwanych formatów plików. Ma możliwość nie tylko wyodrębniania metadanych z obrazów, ale także dodawania, edytowania, aktualizowania i usuwania metadanych z obrazów i dokumentów za pomocą różnych opcji.

W tym artykule będziemy używać tego interfejsu API, więc pamiętaj, aby pobrać jego pliki binarne lub zainstalować interfejs API z NuGet.

Czytaj dane EXIF z obrazów w C#

Możesz łatwo odczytać właściwości danych EXIF, wykonując wymienione kroki. Zaczynając od wyodrębnienia danych EXIF z tego zdjęcia, 93-metrowej Statuy Wolności. Tutaj użyjemy pliku JPG jako przykładowego obrazu, jednak możemy użyć dowolnego pliku, czy to PNG, WebP, BMP, GIF, TIFF, czy dowolnego innego z obsługiwanych formatów plików wymienionych na końcu Ten artykuł.

Obraz Liberty JPG dla danych EXIF
  • Załaduj plik źródłowy obrazu zawierający informacje o danych EXIF, używając konstruktora klasy Metadata.
  • Pobierz jego pakiet główny, wywołując metodę GetRootPackage().
  • Z pakietu głównego pobierz jego ExifPackage z jego właściwości ExifPackage.
  • Po uzyskaniu pakietu EXIF możesz teraz uzyskać dostęp do właściwości EXIF obrazu; jak marka, model, szerokość, długość, data i godzina, prawa autorskie, oprogramowanie itp., jak pokazano poniżej w przykładzie kodu 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);
     }
}

Powyższy kod wyświetli następujące dostępne informacje EXIF dostarczonego obrazu JPG.

Make : NIKON CORPORATION
Model : NIKON D7200 
Width : 640
Length : 384
DateTime : 2018:07:06 19:31:05

Odczyt EXIF IFD i informacji GPS obrazu

Dane EXIF obejmują również informacje Exif IFD (katalog plików obrazów) i GPS (globalny system pozycjonowania). Teraz, aby uzyskać informacje o pakietach IFD i GPS, wystarczy uzyskać dostęp do odpowiednich właściwości pakietu EXIF, tj. ExifIfdPackage lub GpsPackage. Z tych pakietów można wydobyć znacznie więcej informacji niż wymieniono poniżej:

  • Numer seryjny urządzenia
  • Nazwa właściciela aparatu
  • Wzór CFA
  • Prędkość
  • Kierunek obrazu
  • Data stempla
  • Informacje o okolicy
  • Wysokość
  • Szerokość
  • Długość geograficzna
  • itp.

Poniższy kod można dodać w powyższej metodzie, aby wyświetlić dane EXIF wraz z informacjami IFD i 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);

Przeczytaj wszystkie tagi EXIF obrazów w C#

Możesz wyodrębnić wszystkie właściwości EXIF z dowolnego obrazu, możesz to zrobić w prawie podobny sposób jak powyżej:

  • Załaduj obraz za pomocą konstruktora Metadata.
  • Pobierz pakiet główny, wywołując metodę GetRootPackage().
  • Pobierz pakiet EXIF z właściwości ExifPackage pakietu głównego.
  • Iteruj pakiet EXIF i uzyskaj żądane pary nazwa-wartość.
  • Podobnie, pobierz pakiety IFD i GPS, aby wyświetlały swoje klucze i wartości.
// 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);
        }
    }
}

Zaktualizuj właściwości EXIF w C#

Możesz łatwo zmienić istniejące dane EXIF dowolnego obrazu. Oto kroki, które możesz wykonać:

Zaktualizuj pakiet EXIF

  • Pobierz pakiet główny, wywołując metodę GetRootPackage().
  • Ustaw właściwości ExifPackage, przypisując nowe wartości do odpowiednich właściwości, na przykład przypisz nową wartość do:
    • root.ExifPackage.Copyright - aby ustawić zaktualizowane informacje o prawach autorskich.
  • Podobnie możesz ustawić wartości artysty, marki, modelu, oprogramowania, szerokości i wysokości obrazu, daty i godziny itp.

Zaktualizuj pakiet EXIF IFD

Podobnie jak w przypadku ustawiania właściwości pakietu EXIF, możemy aktualizować właściwości pakietów EXIF IFD i GPS.

  • Przypisz wartość do root.ExifPackage.ExifIfdPackage.CameraOwnerName, aby ustawić właściciela kamery.

Możesz odwiedzić klasy ExifIfdPackage lub ExifGpsPackage, aby dowiedzieć się, ile możesz dostosować do swoich obrazów.

// 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");
    }
}

Usuń metadane EXIF z obrazów w C#

Jeśli chcesz usunąć pakiet EXIF z dowolnego pliku, po prostu ustaw jego właściwość ExifPackage na wartość 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");
    }
}

Obsługiwane obrazy i inne formaty

Oto formaty plików obsługiwane obecnie przez GroupDocs.Metadata dla danych EXIF dotyczących obrazów, plików audio i wideo. Zawsze możesz odwiedzić dokumentację, aby uzyskać zaktualizowane informacje.

Typ dokumentu Formaty plików
Obrazy BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF
Audio i wideo MP3, WAV, AVI, MOV/QT, FLV, ASF, DICOM

Zobacz więcej o GroupDocs.Metadata

Porozmawiajmy więcej @ Bezpłatne forum pomocy.

Powiązany artykuł