HEIC (High-Efficiency Image Container) — это контейнер, который может содержать изображения в формате High-Efficiency Image Format HEIF. XMP — это стандарт метаданных на основе XML, который может хранить свойства метаданных в виде пар имя/значение. Однако EXIF (Exchangeable Image File Format) является стандартом и определяет, как хранить свойства метаданных в наиболее распространенных форматах изображений и аудио. В этой статье мы узнаем, как извлекать, обновлять и удалять метаданные XMP и EXIP изображений HEIF/HEIC с помощью C# в приложениях .NET.

Ниже рассматриваются следующие темы:

.NET API для метаданных XMP и EXIF

GroupDocs.Metadata предоставляет .NET API для автоматизации управления метаданными в приложениях .NET. API позволяет читать, обновлять, добавлять, очищать/удалять и просматривать метаданные для многих форматов файлов. Различные стандарты метаданных, такие как EXIF, IPTC и XMP, поддерживаются API. Вы также можете посетить документацию для получения полного списка поддерживаемых форматов файлов для манипулирования метаданными.

Вы можете загрузить DLL или MSI установщик из раздела загрузок или установить API в свое приложение .NET через NuGet.

PM> Install-Package GroupDocs.Metadata

Чтение данных EXIF изображений HEIC/HEIF на С#

Ниже приведены шаги для чтения и извлечения данных EXIF изображений HEIC и HEIF.

  • Загрузите изображение HEIF или HEIC, используя класс метаданных.
  • Получить корневой пакет.
  • Получить пакет EXIF из корневого пакета.
  • Просмотрите свойства данных EXIF.
  • Кроме того, вы можете получить информацию IFD (каталог файлов изображений) и GPS из пакета EXIF.

В следующем коде показано, как получить данные EXIF, метаданные IFD и GPS изображения HEIC с помощью C#.

// Чтение пакетов EXIF, EXIF IFD, EXIF GPS изображений HEIF/HEIC на C#
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);
        }
    }
}

Чтение данных XMP изображений HEIC/HEIF в С#

Следующие шаги считывают метаданные XMP изображений HEIC или HEIF.

  • Загрузите изображение HEIF или HEIC, используя класс метаданных.
  • Получить корневой пакет с помощью метода getRootPackage.
  • Из корневого пакета вы можете получить основную информацию о XMP.
  • Кроме того, вы можете получить информацию о DCMI Dublin Core.
  • Кроме того, вы можете получить информацию о Photoshop с помощью метода getPhotoshop.

В следующем исходном коде показано, как получить информацию XMP basic, DCMI и Photoshop на C#.

// Извлечение данных XMP Basic, DublinCore и Photoshop из изображений HEIC и HEIF на C#
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.

Удалить метаданные EXIF и XMP изображений HEIC/HEIF в C#

Вы можете просто установить для соответствующего пакета EXIF или пакета XMP значение null, чтобы удалить все свойства метаданных.

Следующий код удаляет данные EXIF изображений HEIC в C#.

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

Следующий код удаляет данные XMP изображений HEIC в C#.

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 без ограничений пробной версии.

Вывод

Подводя итог, мы научились извлекать, обновлять, удалять метаданные EXIF и XMP из изображений HEIF/HEIC в C#. Кроме того, вы видели, как получить информацию IFD и GPS из этих изображений. Теперь вы можете легко получить эту информацию, а также начать создавать свои собственные приложения, такие как GroupDocs.Metadata App Product Family, для автоматизации информации о метаданных.

Для получения дополнительной информации, вариантов и примеров вы можете посетить документацию и репозиторий GitHub. Если у вас возникнут дополнительные вопросы, свяжитесь с нами на [форуме] поддержки]13.

Смотрите также