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 存儲庫。如需進一步查詢,請在支持 論壇 上聯繫我們。