HEIC 代表高效圖像容器。它是某些蘋果設備捕獲圖像的文件擴展名。它是一個可以包含高效圖像格式 HEIF 圖像的容器。在本文中,我們將討論如何在 Java 應用程序中提取、更新和刪除 HEIF/HEIC 圖像的 EXIF 和 XMP 元數據。

EXIF,可交換圖像文件格式,是定義如何以最常見的圖像和音頻格式存儲元數據屬性的標準。 XMP 是一種基於 XML 的元數據標準,可以將任何一組元數據屬性存儲為名稱/值對。

下面涵蓋了以下主題

用於 EXIF 和 XMP 元數據的 Java API

GroupDocs.Metadata 為您的 Java 應用程序提供元數據操作 API。 API 允許讀取、更新、添加、清理/刪除和遍歷許多文件格式的功能。它支持各種元數據標準,如 EXIF、IPTC 和 XMP。文字處理文檔、電子表格、演示文稿、電子郵件、電子書、圖像、AutoCAD 繪圖、音頻和視頻文件、種子文件都是受支持的文檔格式。更準確地說,您可以訪問文檔以獲取 元數據操作支持的文件格式 的完整列表。

下載和配置

下載 部分獲取元數據庫。對於基於 Maven 的 Java 應用程序,只需添加以下 pom.xml 配置。在此之後,您可以嘗試本文的示例以及 GitHub 上提供的更多示例。有關詳細信息,您可以訪問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>

在 Java 中讀取 HEIF / HEIC 圖像的 EXIF 數據

以下是讀取和提取 HEIC 和 HEIF 圖像的 EXIF 數據的步驟。

  • 使用元數據類加載 HEIF 或 HEIC 圖像。
  • 獲取根包。
  • 從根包中檢索 EXIF 包。
  • 從 EXIF 包中,您可以遍歷 EXIF 數據屬性。
  • 此外,您還可以從 EXIF 包中獲取 IFD(圖像文件目錄)和 GPS 信息。

以下代碼展示瞭如何使用Java獲取HEIC圖像的EXIF數據、IFD和GPS元數據信息。

// 在 Java 中讀取 HEIF/HEIC 圖像的 EXIF、EXIF IFD、EXIF GPS 包
Metadata metadata = new Metadata("image.heic");
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
    String pattern = "%s : %s";
    // 獲取 EXIF 包信息
    for (TiffTag tag : root.getExifPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
    // 獲取 EXIF IFD 包裹信息
    for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
    // 獲取 GPS 信息
    for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
}

在 Java 中讀取 HEIC / HEIF 圖像的 XMP 數據

以下步驟讀取 HEIC 或 HEIF 圖像的 XMP 元數據。

  • 使用元數據類加載 HEIF 或 HEIC 圖像。
  • 使用 getRootPackage 方法獲取根包。
  • 從根包中,您可以獲得 XMP 的基本信息。
  • 此外,您可以獲得 DCMI Dublin Core 信息。
  • 此外,您可以使用 getPhotoshop 方法獲取 Photoshop 信息。

以下源代碼展示瞭如何用Java獲取XMP基礎、DCMI和Photoshop信息。

// 在 Java 中提取 heic 和 heif 圖像的 XMP 基礎版、DublinCore 和 Photoshop 數據
Metadata metadata = new Metadata("image.heic");
IXmp root = (IXmp) metadata.getRootPackage();

if (root.getXmpPackage() != null) {
    // XMP 基礎版    
    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());
	// ...
    }
    // 都柏林核心信息
    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());
	// ...
    }
    // 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());
	// ...
    }
}

同樣,有許多設置方法可以設置或更新不同的 XMP 屬性。您甚至可以提供自己的鍵值對來設置自定義 XMP 包屬性

在 Java 中刪除 HEIC/HEIF 圖像的 EXIF 和 XMP 元數據

您只需將相應的 EXIF 包或 XMP 包設置為 null 即可刪除所有元數據屬性。

以下代碼刪除 HEIC 圖像的 EXIF 數據。

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

以下代碼刪除 HEIC 圖像的 XMP 數據。

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

結論

綜上所述,我們已經學會了用 Java 從 HEIF/HEIC 圖像中提取、更新、刪除 EXIF 和 XMP 元數據。此外,您還了解瞭如何從這些圖像中獲取 IFD 和 GPS 信息。現在您可以輕鬆獲取此信息,還可以繼續構建您自己的應用程序(如 GroupDocs.Metadata App Product Family)來自動化元數據信息。

有關更多信息、選項和示例,您可以訪問 文檔GitHub 存儲庫。如需進一步查詢,請在支持 論壇 上聯繫我們。

也可以看看