上一篇中,我們討論瞭如何在Java中處理圖像的EXIF數據。在這裡,今天我們將研究實現相同但在 C# 中。如果您還沒有訪問過上一篇文章,但想在 C# 中以編程方式提取、更新、添加或刪除圖像的 EXIF 數據,那麼本文將指導您完成此操作。我們將介紹以下在 C# 中處理 EXIF 數據的方法:

元數據管理 C# 庫

GroupDocs 的元數據 .NET API

GroupDocs.Metadata for .NET 是元數據管理 .NET API。對於各種受支持的文件格式,它有一長串 features。它不僅可以從圖像中提取元數據,還可以使用各種選項從圖像和文檔中添加、編輯、更新和刪除元數據。

在本文中,我們將使用此 API,因此請確保 下載 其二進製文件或從 NuGet 安裝 API。

在 C# 中從圖像中讀取 EXIF 數據

您可以按照上述步驟輕鬆讀取 EXIF 數據屬性。從這張圖片中提取 EXIF 數據開始,93 米高的自由女神像。在這裡,我們將使用 JPG 文件作為示例圖像,但是,我們可以使用任何文件,無論是 PNG、WebP、BMP、GIF、TIFF 還是 支持的文件格式 中提到的任何其他文件本文。

EXIF 數據的 Liberty JPG 圖像
  • 使用 Metadata 類構造函數加載包含 EXIF 數據信息的圖像源文件。
  • 通過調用 GetRootPackage() 方法獲取其根包。
  • 從根包中,從其 ExifPackage 屬性 中獲取其 ExifPackage
  • 擁有 EXIF 包後,您現在可以訪問圖像的 EXIF 屬性;如品牌、型號、寬度、長度、日期時間、版權、軟件等,如下面的 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);
     }
}

上面的代碼將顯示提供的 JPG 圖片的以下可用 EXIF 信息。

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

讀取圖像的 EXIF IFD 和 GPS 信息

EXIF 數據還包括 Exif IFD(圖像文件目錄)和 GPS(全球定位系統)信息。現在對於 IFD 和 GPS 包信息,您只需訪問 EXIF 包的相應屬性,即 ExifIfdPackageGpsPackage。從這些包中,您可以提取比下面提到的更多的信息:

  • 設備序列號
  • 相機所有者姓名
  • CFA模式
  • 速度
  • 圖像方向
  • 日期戳
  • 區域信息
  • 高度
  • 緯度
  • 經度
  • 等等

可以在上述方法中添加下面提到的代碼,以顯示 EXIF 數據以及 IFD 和 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);

在 C# 中讀取圖像的所有 EXIF 標籤

你可以提取任何圖像的所有 EXIF 屬性,你可以用與上面幾乎相似的方式來做:

  • 使用 Metadata 構造函數加載圖像。
  • 通過調用方法 GetRootPackage() 獲取根包。
  • 從根包的 ExifPackage property 中獲取 EXIF 包。
  • 迭代 EXIF 包並獲得所需的名稱-值對。
  • 同樣,獲取 IFD 和 GPS 包以顯示其鍵和值。
// 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);
        }
    }
}

在 C# 中更新 EXIF 屬性

您可以輕鬆更改任何圖像的現有 EXIF 數據。以下是您可以遵循的步驟:

更新 EXIF 包

  • 通過調用方法 GetRootPackage() 獲取根包。
  • 通過將新值分配給相應的屬性來設置 ExifPackage 屬性,例如將新值分配給:
    • root.ExifPackage.Copyright - 設置更新的版權信息。
  • 同樣,您可以設置藝術家、品牌、型號、軟件、圖像寬度和高度、日期時間等的值。

更新 EXIF IFD 包

與EXIF包的設置屬性類似,我們可以更新EXIF IFD和GPS包的屬性。

  • 為 root.ExifPackage.ExifIfdPackage.CameraOwnerName 賦值以設置相機所有者。

您可以訪問 ExifIfdPackageExifGpsPackage 類來了解您可以為圖像自定義多少。

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

從 C# 中的圖像中刪除 EXIF 元數據

如果要從任何文件中刪除 EXIF 包,只需將其 ExifPackage 屬性設置為 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");
    }
}

支持的圖像和其他格式

這些是GroupDocs目前支持的文件格式。元數據用於圖像、音頻和視頻的EXIF數據信息。您可以隨時訪問 文檔 以獲取更新信息。

文件類型 文件格式
圖片 BMP、GIF、JPG、JPEG、JPE、JP2、PNG、DJVU、DWG、DXF、WebP、TIFF、PSD、EMF、WMF
音視頻 MP3、WAV、AVI、MOV/QT、FLV、ASF、DICOM

查看有關 GroupDocs.Metadata 的更多信息

讓我們多談談@免費支持論壇。

相關文章