Trong bài đăng trước, chúng tôi đã thảo luận về cách xử lý dữ liệu EXIF của hình ảnh trong Java. Ở đây, hôm nay chúng ta sẽ xem xét đạt được điều tương tự nhưng trong C#. Nếu bạn chưa xem bài trước, nhưng bạn muốn trích xuất, cập nhật, thêm hoặc xóa dữ liệu EXIF của hình ảnh theo chương trình trong C#, thì bài viết này sẽ hướng dẫn bạn thực hiện điều này. Chúng tôi sẽ đề cập đến các cách sau để thao tác với dữ liệu EXIF trong C#:

Quản lý siêu dữ liệu Thư viện C#

Siêu dữ liệu .NET API của GroupDocs

GroupDocs.Metadata for .NET là API .NET quản lý siêu dữ liệu. Nó có một danh sách dài tính năng cho nhiều định dạng tệp được hỗ trợ. Nó không chỉ có khả năng trích xuất siêu dữ liệu từ hình ảnh mà còn có thể thêm, chỉnh sửa, cập nhật và xóa siêu dữ liệu khỏi hình ảnh và tài liệu với nhiều tùy chọn khác nhau.

Trong bài viết này, chúng ta sẽ sử dụng API này, vì vậy vui lòng đảm bảo tải xuống các tệp nhị phân của nó hoặc cài đặt API từ NuGet.

Đọc dữ liệu EXIF từ hình ảnh trong C#

Bạn có thể dễ dàng đọc các thuộc tính dữ liệu EXIF bằng cách làm theo các bước đã đề cập. Bắt đầu với việc trích xuất dữ liệu EXIF từ bức ảnh này, Tượng Nữ thần Tự do cao 93m. Ở đây, chúng tôi sẽ sử dụng tệp JPG làm hình ảnh ví dụ, tuy nhiên, chúng tôi có thể sử dụng bất kỳ tệp nào cho dù đó là PNG, WebP, BMP, GIF, TIFF hay bất kỳ tệp nào khác từ các định dạng tệp được hỗ trợ được đề cập ở cuối bài viết này.

Hình ảnh Liberty JPG cho dữ liệu EXIF
  • Tải tệp nguồn hình ảnh chứa thông tin dữ liệu EXIF bằng hàm tạo của lớp Siêu dữ liệu.
  • Nhận gói gốc của nó bằng cách gọi phương thức GetRootPackage().
  • Từ gói gốc, lấy ExifPackage từ ExifPackage property của nó.
  • Khi bạn có gói EXIF, bây giờ bạn có thể truy cập các thuộc tính EXIF của hình ảnh; như Tạo, Kiểu, Chiều rộng, Độ dài, Ngày giờ, Bản quyền, Phần mềm, v.v. như được hiển thị bên dưới trong ví dụ về mã 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);
     }
}

Đoạn mã trên sẽ hiển thị thông tin EXIF có sẵn sau đây của hình ảnh JPG được cung cấp.

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

Đọc thông tin EXIF IFD & GPS của hình ảnh

Dữ liệu EXIF cũng bao gồm Thông tin Exif IFD (Thư mục tệp hình ảnh) và GPS (Hệ thống định vị toàn cầu). Giờ đây, đối với thông tin gói IFD và GPS, bạn chỉ cần truy cập vào các thuộc tính tương ứng của gói EXIF, ví dụ ExifIfdPackage hoặc GpsPackage. Từ các gói này, bạn có thể trích xuất nhiều thông tin hơn được đề cập dưới đây:

  • Số sê-ri thiết bị
  • Tên chủ sở hữu máy ảnh
  • Mẫu CFA
  • Tốc độ, vận tốc
  • Hướng hình ảnh
  • Dấu ngày
  • thông tin khu vực
  • Độ cao
  • vĩ độ
  • kinh độ
  • vân vân.

Mã được đề cập bên dưới có thể được thêm vào phương pháp trên của bạn để hiển thị dữ liệu EXIF cùng với thông tin 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 tất cả các thẻ EXIF của hình ảnh trong C#

Bạn có thể trích xuất tất cả các thuộc tính EXIF của bất kỳ hình ảnh nào, bạn có thể thực hiện theo cách gần như tương tự như trên:

  • Tải hình ảnh bằng hàm tạo Siêu dữ liệu.
  • Nhận gói gốc bằng cách gọi phương thức GetRootPackage().
  • Lấy gói EXIF từ thuộc tính ExifPackage của gói gốc.
  • Lặp lại gói EXIF và nhận các cặp giá trị tên mong muốn.
  • Tương tự, để các gói IFD & GPS hiển thị các khóa và giá trị của nó.
// 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ập nhật Thuộc tính EXIF trong C#

Bạn có thể thay đổi dữ liệu EXIF hiện có của bất kỳ hình ảnh nào một cách dễ dàng. Sau đây là các bước bạn có thể làm theo:

Cập nhật gói EXIF

  • Lấy gói gốc bằng cách gọi phương thức GetRootPackage().
  • Đặt thuộc tính ExifPackage bằng cách gán giá trị mới cho thuộc tính tương ứng như gán giá trị mới cho:
    • root.ExifPackage.Copyright - để đặt thông tin bản quyền được cập nhật.
  • Tương tự, bạn có thể đặt các giá trị cho nghệ sĩ, nhà sản xuất, mô hình, phần mềm, chiều rộng và chiều cao của hình ảnh, Ngày giờ, v.v.

Cập nhật gói EXIF IFD

Tương tự như các thuộc tính cài đặt của gói EXIF, chúng tôi có thể cập nhật các thuộc tính của gói EXIF IFD và GPS.

  • Gán giá trị cho root.ExifPackage.ExifIfdPackage.CameraOwnerName để đặt chủ sở hữu máy ảnh.

Bạn có thể truy cập các lớp ExifIfdPackage hoặc ExifGpsPackage để biết được mức độ bạn có thể tùy chỉnh cho hình ảnh của mình.

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

Xóa siêu dữ liệu EXIF khỏi hình ảnh trong C#

Nếu bạn muốn xóa gói EXIF khỏi bất kỳ tệp nào, chỉ cần đặt thuộc tính ExifPackage của tệp thành 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");
    }
}

Hình ảnh được hỗ trợ và các định dạng khác

Đây là các định dạng tệp hiện được GroupDocs.Metadata hỗ trợ cho thông tin dữ liệu EXIF của hình ảnh, âm thanh và video. Bạn luôn có thể truy cập tài liệu để biết thông tin cập nhật.

Loại tài liệu Định dạng tệp
Hình ảnh BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF
Âm thanh & Hình ảnh MP3, WAV, AVI, MOV / QT, FLV, ASF, DICOM

Xem thêm về GroupDocs.Metadata

Hãy nói chuyện nhiều hơn @ Diễn đàn hỗ trợ miễn phí.

Bài viết liên quan