HEIC (Bộ chứa hình ảnh hiệu quả cao) là một bộ chứa có thể chứa các hình ảnh HEIF có định dạng hình ảnh hiệu quả cao. XMP là một tiêu chuẩn siêu dữ liệu dựa trên XML, có thể lưu trữ các thuộc tính siêu dữ liệu dưới dạng các cặp tên/giá trị. Tuy nhiên, EXIF (Định dạng tệp hình ảnh có thể thay đổi) là tiêu chuẩn và xác định cách lưu trữ các thuộc tính siêu dữ liệu ở định dạng hình ảnh và âm thanh phổ biến nhất. Trong bài viết này, chúng ta sẽ tìm hiểu cách trích xuất, cập nhật và xóa siêu dữ liệu XMP và EXIP của hình ảnh HEIF/HEIC bằng C# trong các ứng dụng .NET.

Các chủ đề sau đây được đề cập dưới đây:

API .NET cho Siêu dữ liệu XMP và EXIF

GroupDocs.Metadata cung cấp API .NET để tự động hóa việc quản lý siêu dữ liệu trong các ứng dụng .NET. API cho phép đọc, cập nhật, thêm, xóa/xóa và duyệt siêu dữ liệu cho nhiều định dạng tệp. Các tiêu chuẩn siêu dữ liệu khác nhau như EXIF, IPTC và XMP được API hỗ trợ. Bạn cũng có thể truy cập tài liệu để biết danh sách đầy đủ về các định dạng tệp được hỗ trợ cho thao tác siêu dữ liệu.

Bạn có thể tải xuống trình cài đặt DLL hoặc MSI từ phần tải xuống hoặc cài đặt API trong ứng dụng .NET của bạn qua NuGet.

PM> Install-Package GroupDocs.Metadata

Đọc dữ liệu EXIF của HEIC / HEIF Images trong C#

Sau đây là các bước để đọc và trích xuất dữ liệu EXIF của hình ảnh HEIC và HEIF.

  • Tải hình ảnh HEIF hoặc HEIC bằng lớp Siêu dữ liệu.
  • Lấy gói gốc.
  • Truy xuất gói EXIF từ gói gốc.
  • Duyệt qua các thuộc tính dữ liệu EXIF.
  • Hơn nữa, bạn có thể lấy thông tin IFD (Image File Directory) và GPS từ gói EXIF.

Đoạn mã sau cho biết cách lấy dữ liệu EXIF, IFD và thông tin siêu dữ liệu GPS của hình ảnh HEIC bằng C#.

// Đọc Gói EXIF, EXIF IFD, EXIF GPS của hình ảnh HEIF / HEIC trong 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);
        }
    }
}

Đọc dữ liệu XMP của hình ảnh HEIC/HEIF trong C#

Các bước sau đọc siêu dữ liệu XMP của hình ảnh HEIC hoặc HEIF.

  • Tải hình ảnh HEIF hoặc HEIC bằng lớp Siêu dữ liệu.
  • Nhận gói gốc bằng phương thức getRootPackage.
  • Từ gói gốc, bạn có thể lấy thông tin cơ bản của XMP.
  • Hơn nữa, bạn có thể lấy thông tin DCMI Dublin Core.
  • Ngoài ra, bạn có thể lấy thông tin Photoshop bằng phương thức getPhotoshop.

Mã nguồn sau đây cho biết cách lấy thông tin XMP cơ bản, DCMI và Photoshop trong C#.

// Trích xuất dữ liệu XMP Basic, DublinCore và Photoshop của hình ảnh HEIC và HEIF trong 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);
            // ... 
        }
        // ...
    }
}

Tương tự như vậy, có nhiều phương thức setter để thiết lập hoặc cập nhật các thuộc tính XMP khác nhau. Bạn thậm chí có thể cung cấp cặp khóa-giá trị của riêng mình để đặt thuộc tính gói XMP tùy chỉnh.

Xóa siêu dữ liệu EXIF và XMP của hình ảnh HEIC/HEIF trong C#

Bạn chỉ có thể đặt gói EXIF hoặc gói XMP tương ứng thành null để xóa tất cả các thuộc tính siêu dữ liệu.

Đoạn mã sau xóa dữ liệu EXIF của hình ảnh HEIC trong 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");
	}
}

Đoạn mã sau xóa dữ liệu XMP của hình ảnh HEIC trong 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");
	}
}

Nhận giấy phép API miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để sử dụng API mà không bị giới hạn đánh giá.

Sự kết luận

Tóm lại, chúng ta đã học cách trích xuất, cập nhật, xóa siêu dữ liệu EXIF và XMP khỏi hình ảnh HEIF/HEIC trong C#. Hơn nữa, bạn đã biết cách lấy thông tin IFD và GPS từ những hình ảnh này. Giờ đây, bạn có thể dễ dàng lấy thông tin này và cũng có thể bắt đầu xây dựng các ứng dụng của riêng mình như GroupDocs.Dòng sản phẩm ứng dụng siêu dữ liệu để tự động hóa thông tin siêu dữ liệu.

Để biết thêm thông tin, tùy chọn và ví dụ, bạn có thể truy cập kho lưu trữ tài liệuGitHub. Đối với các câu hỏi khác, hãy liên hệ với chúng tôi trên [diễn đàn] hỗ trợ 13.

Xem thêm