** HEIC は、High-EfficiencyImageContainerの略です。これは、一部のAppleデバイスでキャプチャされた画像のファイル拡張子です。これは、High-Efficiency Image Format HEIF画像を格納できるコンテナーです。この記事では、Javaアプリケーション内で HEIF / HEICイメージのEXIFおよびXMPメタデータ**を抽出、更新、および削除する方法について説明します。

** EXIF **、Exchangeable Image File Formatは、メタデータプロパティを最も一般的な画像および音声形式で保存する方法を定義する標準です。 ** XMP **はXMLベースのメタデータ標準であり、メタデータプロパティの任意のセットを名前/値のペアとして格納できます。

以下のトピックについては、以下で説明します

EXIFおよびXMPメタデータ用のJavaAPI

GroupDocs.Metadataは、Javaアプリケーション用のメタデータ操作APIを提供します。 APIを使用すると、多くのファイル形式の機能の読み取り、更新、追加、クリーンアップ/削除、およびトラバースが可能になります。 EXIF、IPTC、XMPなどのさまざまなメタデータ標準をサポートしています。ワードプロセッシングドキュメント、スプレッドシート、プレゼンテーション、電子メールメッセージ、eBook、画像、AutoCAD図面、オーディオおよびビデオファイル、トレントは、サポートされているドキュメント形式の1つです。より正確には、メタデータ操作でサポートされているファイル形式の完全なリストについてはドキュメントをご覧ください。

ダウンロードして構成する

ダウンロードセクションからメタデータライブラリを取得します。 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、EXIFGPSパッケージを読む
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()));
    }
    // EXIFIFDパッケージ情報を取得する
    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ダブリンコア情報を取得できます。
  • さらに、getPhotoshopメソッドを使用してPhotoshop情報を取得できます。

次のソースコードは、JavaでXMPベーシック、DCMI、およびPhotoshopの情報を取得する方法を示しています。

// Javaでheicおよびheif画像のXMPBasic、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());
	// ..。
    }
    // DublinCore情報
    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 AppProductFamilyなどの独自のアプリケーションを構築してメタデータ情報を自動化することもできます。

詳細、オプション、および例については、ドキュメントおよびGitHubリポジトリにアクセスしてください。さらに質問がある場合は、サポートフォーラムでお問い合わせください。

関連項目