У попередній публікації ми обговорювали, як працювати з даними EXIF зображень у Java. Сьогодні ми розглянемо досягнення того ж, але в C#. Якщо ви не відвідали останню публікацію, але хочете отримати, оновити, додати або видалити дані EXIF ваших зображень програмним шляхом у C#, ця стаття допоможе вам у цьому. Ми розглянемо наступні способи роботи з даними EXIF у C#:

Бібліотека керування метаданими C#

Метадані .NET API від GroupDocs

GroupDocs.Metadata for .NET — це API керування метаданими .NET. Він має довгий список функцій для широкого спектру підтримуваних форматів файлів. Він має можливість не тільки витягувати метадані із зображень, але також може додавати, редагувати, оновлювати та видаляти метадані із зображень і документів за допомогою різних параметрів.

У цій статті ми будемо використовувати цей API, тому не забудьте завантажити його двійкові файли або встановити API з NuGet.

Читання даних EXIF із зображень у C#

Ви можете легко прочитати властивості даних EXIF, виконавши згадані кроки. Починаючи з вилучення даних EXIF із цього зображення, Статуя Свободи заввишки 93 метри. Тут ми використаємо файл JPG як приклад зображення, однак ми можемо використовувати будь-який файл, будь то PNG, WebP, BMP, GIF, TIFF або будь-який інший із підтримуваних форматів файлів, згаданих у кінці Ця стаття.

Зображення Liberty JPG для даних EXIF
  • Завантажте вихідний файл зображення, що містить інформацію про дані EXIF, використовуючи конструктор класу Metadata.
  • Отримайте його кореневий пакет, викликавши метод GetRootPackage().
  • З кореневого пакета отримайте його ExifPackage із властивості ExifPackage.
  • Отримавши пакет EXIF, тепер ви можете отримати доступ до властивостей EXIF зображення; наприклад Make, Model, Width, Length, DateTime, Copyright, Software тощо, як показано нижче в прикладі коду 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);
     }
}

Наведений вище код відобразить наступну доступну інформацію EXIF наданого зображення JPG.

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, наприклад ExifIfdPackage або GpsPackage. З цих пакетів ви можете отримати набагато більше інформації, ніж зазначено нижче:

  • Серійний номер пристрою
  • Ім’я власника камери
  • Шаблон 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);

Читати всі теги EXIF зображень у C#

Ви можете витягти всі властивості EXIF будь-якого зображення, ви можете зробити це майже так само, як описано вище:

  • Завантажте зображення за допомогою конструктора Metadata.
  • Отримайте кореневий пакет, викликавши метод GetRootPackage().
  • Отримайте пакет EXIF із властивості ExifPackage кореневого пакета.
  • Повторіть пакет 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);
        }
    }
}

Оновіть властивості EXIF у C#

Ви можете легко змінити існуючі дані EXIF будь-якого зображення. Нижче наведено кроки, які ви можете виконати:

Оновити пакет EXIF

  • Отримайте кореневий пакет, викликавши метод GetRootPackage().
  • Встановіть властивості ExifPackage, призначивши нові значення відповідним властивостям, як-от призначити нове значення:
    • root.ExifPackage.Copyright - для встановлення оновленої інформації про авторські права.
  • Так само ви можете встановити значення для виконавця, марки, моделі, програмного забезпечення, ширини та висоти зображення, дати та часу тощо.

Оновіть пакет EXIF IFD

Подібно до властивостей налаштувань пакета EXIF, ми можемо оновити властивості пакетів EXIF IFD і GPS.

  • Призначте значення root.ExifPackage.ExifIfdPackage.CameraOwnerName, щоб установити власника камери.

Ви можете відвідати класи ExifIfdPackage або ExifGpsPackage, щоб отримати уявлення про те, скільки можна налаштувати для своїх зображень.

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

Видалення метаданих EXIF із зображень у C#

Якщо ви хочете видалити пакет 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

Давайте поговоримо більше @ Безкоштовний форум підтримки.

Пов’язана стаття