HEIC(High-Efficiency Image Container)是一個可以包含High-Efficiency Image Format HEIF圖像的容器。 XMP 是一種基於 XML 的元數據標準,可以將元數據屬性存儲為名稱/值對。但是,EXIF(可交換圖像文件格式)是標準,它定義瞭如何以最常見的圖像和音頻格式存儲元數據屬性。在本文中,我們將學習如何在 .NET 應用程序中使用 C# 提取、更新和刪除 HEIF/HEIC 圖像的 XMP 和 EXIP 元數據。

以下主題涵蓋如下:

用於 XMP 和 EXIF 元數據的 .NET API

GroupDocs.Metadata 提供 .NET API 以在 .NET 應用程序中自動執行元數據管理。 API 允許讀取、更新、添加、清理/刪除和遍歷許多文件格式的元數據。 API 支持各種元數據標準,如 EXIF、IPTC 和 XMP。您還可以訪問文檔以獲取 元數據操作支持的文件格式 的完整列表。

您可以從 下載部分 下載 DLL 或 MSI 安裝程序,或通過 NuGet 在您的 .NET 應用程序中安裝 API。

PM> Install-Package GroupDocs.Metadata

在 C# 中讀取 HEIC / HEIF 圖像的 EXIF 數據

以下是讀取和提取 HEIC 和 HEIF 圖像的 EXIF 數據的步驟。

  • 使用元數據類加載 HEIF 或 HEIC 圖像。
  • 獲取根包。
  • 從根包中檢索 EXIF 包。
  • 遍歷 EXIF 數據屬性。
  • 此外,您還可以從 EXIF 包中獲取 IFD(圖像文件目錄)和 GPS 信息。

以下代碼顯示瞭如何使用 C# 獲取 HEIC 圖像的 EXIF 數據、IFD 和 GPS 元數據信息。

// 在 C# 中讀取 HEIF/HEIC 圖像的 EXIF、EXIF IFD、EXIF GPS 包
using (Metadata metadata = new Metadata(@"image.heic"))
{
    IExif root = metadata.GetRootPackage() as IExif;
    if (root != null && root.ExifPackage != null)
    {
        const string pattern = "{0} = {1}";

        foreach (TiffTag tag in root.ExifPackage.ToList())
        {
            Console.WriteLine(pattern, tag.TagID, tag.Value);
        }

        foreach (TiffTag tag in root.ExifPackage.ExifIfdPackage.ToList())
        {
            Console.WriteLine(pattern, tag.TagID, tag.Value);
        }

        foreach (TiffTag tag in root.ExifPackage.GpsPackage.ToList())
        {
            Console.WriteLine(pattern, tag.TagID, tag.Value);
        }
    }
}

在 C# 中讀取 HEIC / HEIF 圖像的 XMP 數據

以下步驟讀取 HEIC 或 HEIF 圖像的 XMP 元數據。

  • 使用元數據類加載 HEIF 或 HEIC 圖像。
  • 使用 getRootPackage 方法獲取根包。
  • 從根包中,您可以獲得 XMP 的基本信息。
  • 此外,您可以獲得 DCMI Dublin Core 信息。
  • 此外,您可以使用 getPhotoshop 方法獲取 Photoshop 信息。

下面的源代碼展示瞭如何在C#中獲取XMP基礎、DCMI和Photoshop信息。

// 在 C# 中提取 HEIC 和 HEIF 圖像的 XMP Basic、DublinCore 和 Photoshop 數據
using (Metadata metadata = new Metadata(@"xmp.heic"))
{
    IXmp root = metadata.GetRootPackage() as IXmp;
    if (root != null && root.XmpPackage != null)
    {
        if (root.XmpPackage.Schemes.XmpBasic != null)
        {
            Console.WriteLine(root.XmpPackage.Schemes.XmpBasic.CreatorTool);
            Console.WriteLine(root.XmpPackage.Schemes.XmpBasic.CreateDate);
            Console.WriteLine(root.XmpPackage.Schemes.XmpBasic.ModifyDate);
            Console.WriteLine(root.XmpPackage.Schemes.XmpBasic.Label);
            Console.WriteLine(root.XmpPackage.Schemes.XmpBasic.Nickname);
            // ...
        }
        if (root.XmpPackage.Schemes.DublinCore != null)
        {
            Console.WriteLine(root.XmpPackage.Schemes.DublinCore.Format);
            Console.WriteLine(root.XmpPackage.Schemes.DublinCore.Coverage);
            Console.WriteLine(root.XmpPackage.Schemes.DublinCore.Identifier);
            Console.WriteLine(root.XmpPackage.Schemes.DublinCore.Source);
            // ...
        }
        if (root.XmpPackage.Schemes.Photoshop != null)
        {
            Console.WriteLine(root.XmpPackage.Schemes.Photoshop.ColorMode);
            Console.WriteLine(root.XmpPackage.Schemes.Photoshop.IccProfile);
            Console.WriteLine(root.XmpPackage.Schemes.Photoshop.Country);
            Console.WriteLine(root.XmpPackage.Schemes.Photoshop.City);
            Console.WriteLine(root.XmpPackage.Schemes.Photoshop.DateCreated);
            // ... 
        }
        // ...
    }
}

同樣,有許多設置方法可以設置或更新不同的 XMP 屬性。您甚至可以提供自己的鍵值對來設置自定義 XMP 包屬性

在 C# 中刪除 HEIC/HEIF 圖像的 EXIF 和 XMP 元數據

您只需將相應的 EXIF 包或 XMP 包設置為 null 即可刪除所有元數據屬性。

以下代碼在 C# 中刪除 HEIC 圖片的 EXIF 數據。

using (Metadata metadata = new Metadata("image.heic"))
{
	IExif root = metadata.GetRootPackage() as IExif;
	if (root != null)
	{
		root.ExifPackage = null;
		metadata.Save("no-exif-image.heic");
	}
}

以下代碼在 C# 中刪除 HEIC 圖像的 XMP 數據。

using (Metadata metadata = new Metadata("image.heic"))
{
	IXmp root = metadata.GetRootPackage() as IXmp;
	if (root != null)
	{
		root.XmpPackage = null;
		metadata.Save("no-xmp-image.heic");
	}
}

獲取免費的 API 許可證

您可以獲得免費的臨時許可證,以便在不受評估限制的情況下使用 API。

結論

綜上所述,我們已經學會了在 C# 中從 HEIF/HEIC 圖像中提取、更新、刪除 EXIF 和 XMP 元數據。此外,您還了解瞭如何從這些圖像中獲取 IFD 和 GPS 信息。現在您可以輕鬆獲取此信息,並開始構建您自己的應用程序,例如 GroupDocs.Metadata App Product Family 來自動化元數據信息。

有關更多信息、選項和示例,您可以訪問 文檔GitHub 存儲庫。如需進一步查詢,請在支持 論壇 上聯繫我們。

也可以看看