HEIC là viết tắt của Bộ chứa hình ảnh hiệu quả cao. Đây là phần mở rộng tệp cho các hình ảnh đã chụp cho một số thiết bị của Apple. Nó là một vùng chứa có thể chứa các hình ảnh HEIF Định dạng hình ảnh hiệu quả cao. Trong bài viết này, chúng ta sẽ thảo luận về cách trích xuất, cập nhật và xóa siêu dữ liệu EXIF và XMP của hình ảnh HEIF/HEIC trong các ứng dụng Java.

EXIF, Định dạng tệp hình ảnh có thể trao đổi là tiêu chuẩn xác định cách lưu trữ các thuộc tính siêu dữ liệu trong các định dạng hình ảnh và âm thanh phổ biến nhất. XMP là một tiêu chuẩn siêu dữ liệu dựa trên XML, có thể lưu trữ bất kỳ bộ thuộc tính siêu dữ liệu nào dưới dạng các cặp tên/giá trị.

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

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

GroupDocs.Metadata cung cấp API thao tác siêu dữ liệu cho các ứng dụng Java của bạn. API cho phép đọc, cập nhật, thêm, xóa/xóa và duyệt các tính năng cho nhiều định dạng tệp. Nó hỗ trợ các tiêu chuẩn siêu dữ liệu khác nhau như EXIF, IPTC và XMP. Tài liệu soạn thảo văn bản, bảng tính, bản trình bày, email, sách điện tử, hình ảnh, bản vẽ AutoCAD, tệp âm thanh và video, torrent, nằm trong số các định dạng tài liệu được hỗ trợ. Chính xác hơn, bạn 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ợ để thao tác siêu dữ liệu.

Tải xuống và định cấu hình

Tải thư viện siêu dữ liệu từ phần tải xuống. Đối với ứng dụng Java dựa trên Maven của bạn, chỉ cần thêm cấu hình pom.xml sau. Sau đó, bạn có thể thử các ví dụ của bài viết này cũng như nhiều ví dụ khác có sẵn trên GitHub. Để biết chi tiết, bạn có thể truy cập Tham khảo API.

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-metadata</artifactId>
        <version>21.4</version> 
</dependency>

Đọc dữ liệu EXIF của Hình ảnh HEIF / HEIC trong Java

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.
  • Từ gói EXIF, bạn có thể 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 Java.

// Đọc Gói EXIF, EXIF IFD, EXIF GPS của hình ảnh HEIF / HEIC trong Java
Metadata metadata = new Metadata("image.heic");
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
    String pattern = "%s : %s";
    // Nhận thông tin gói EXIF
    for (TiffTag tag : root.getExifPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
    // Nhận thông tin gói EXIF IFD
    for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
    // Nhận thông tin GPS
    for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
}

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

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 cơ bản về XMP, DCMI và Photoshop trong Java.

// Trích xuất dữ liệu XMP cơ bản, DublinCore và Photoshop của hình ảnh heic và heif trong Java
Metadata metadata = new Metadata("image.heic");
IXmp root = (IXmp) metadata.getRootPackage();

if (root.getXmpPackage() != null) {
    // XMP cơ bản    
    if (root.getXmpPackage().getSchemes().getXmpBasic() != null) {
        XmpBasicPackage xmpBasicPackage = root.getXmpPackage().getSchemes().getXmpBasic();
	System.out.println("Creator Tool : " + xmpBasicPackage.getCreatorTool());
	System.out.println("Create Date : " + xmpBasicPackage.getCreateDate());
	System.out.println("Modify Date : " + xmpBasicPackage.getModifyDate());
	System.out.println("Label : " + xmpBasicPackage.getLabel());
	System.out.println("Nick Name: " + xmpBasicPackage.getNickname());
	// ...
    }
    // DublinThông tin cốt lõi
    if (root.getXmpPackage().getSchemes().getDublinCore() != null) {
	XmpDublinCorePackage xmpDublinCorePackage = root.getXmpPackage().getSchemes().getDublinCore();
	System.out.println("Format : " + xmpDublinCorePackage.getFormat());
	System.out.println("Coverage :" + xmpDublinCorePackage.getCoverage());
	System.out.println("Identifier : " + xmpDublinCorePackage.getIdentifier());
	System.out.println("Source : " + xmpDublinCorePackage.getSource());
	// ...
    }
    // Thông tin photoshop
    if (root.getXmpPackage().getSchemes().getPhotoshop() != null) {
	XmpPhotoshopPackage xmpPhotoshopPackage = root.getXmpPackage().getSchemes().getPhotoshop();
	System.out.println("Color Mode : " + xmpPhotoshopPackage.getColorMode());
	System.out.println("ICC Profile : " + xmpPhotoshopPackage.getIccProfile());
	System.out.println("Country : " + xmpPhotoshopPackage.getCountry());
	System.out.println("City : " + xmpPhotoshopPackage.getCity());
	System.out.println("Date Created : " + xmpPhotoshopPackage.getDateCreated());
	// ...
    }
}

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 Java

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.

try (Metadata metadata = new Metadata("image.heic")) {
	IExif root = (IExif) metadata.getRootPackage();
	root.setExifPackage(null);
	metadata.save("no-exif-image.heic");
}

Đoạn mã sau xóa dữ liệu XMP của hình ảnh HEIC.

try (Metadata metadata = new Metadata("image.heic")) {
	IXmp root = (IXmp) metadata.getRootPackage();
	root.setXmpPackage(null);
	metadata.save("no-xmp-image.heic");
}

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 Java. 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ể tiếp tục xây dựng các ứng dụng của riêng mình như GroupDocs.Metadata App Product Family để 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