** EXIF **(Exchangeable Image File Format) は、主にデジタルカメラやスキャナーで使用される画像と音声の形式を指定するための標準です。 EXIFデータには、キャプチャされた画像ファイルに関するタグ付けとメタデータ情報が含まれます。メタデータには、カメラのメーカー、モデル、シャッタースピード、日付と時刻、絞り、露出時間、X解像度、Y解像度などの情報が含まれる場合があります。等

プログラムで画像のEXIFデータを管理、抽出、更新、または削除したい場合は、この記事が役に立ちます。この記事では、JavaでEXIFデータを操作する次の方法について説明します。

Javaメタデータ操作ライブラリ

GroupDocsによるメタデータJavaAPI

GroupDocs.Metadata for Javaは、使いやすいメタデータ管理JavaAPIです。 JPG、PNG、WebPなどの画像からメタデータを抽出するだけでなく、さまざまなオプションを使用して、画像やその他のドキュメントからメタデータを追加、編集、更新、および削除することもできます。

この記事ではこのAPIを使用しているので、必ずダウンロードするか、pom.xmlに次の構成を追加してMavenベースのアプリケーションに統合してください。

リポジトリと依存関係

<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>20.5</version>
    <classifier>javadoc</classifier>
</dependency>

Javaの画像からEXIFデータを抽出-メタデータビューア

簡単な手順に従って、EXIFデータのプロパティを読み取ることができます。このエッフェル塔の写真からEXIFデータを抽出することから始めましょう。サンプル画像としてJPGファイルを選択しました。PNG、WebP、BMP、GIF、TIFFのいずれのファイルでも使用できます。

EXIFデータのエッフェル塔の写真
  • Metadataクラスコンストラクターを使用して、EXIFデータ情報を含む画像ソースファイルをロードします。
  • getRootPackage() メソッドを呼び出して、ルートパッケージを取得します。
  • ルートパッケージから、getExifPackage() メソッドを呼び出してEXIFパッケージを取得します。
  • EXIFパッケージを入手すると、** Make Model Width Length **、Date-Timeなどの画像EXIFプロパティを次のように取得できます。以下のJavaコード例では。
// Extract EXIF Data Package Information from image in Java
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
	IExif root = (IExif) metadata.getRootPackage();
	if (root.getExifPackage() != null) {
		// Extract EXIF Package
		ExifPackage exifPackage = root.getExifPackage();
		System.out.println("Make : " + exifPackage.getMake());
		System.out.println("Model : " + exifPackage.getModel());
		System.out.println("Width : " + exifPackage.getImageWidth());
		System.out.println("Length : " + exifPackage.getImageLength());
		System.out.println("DateTime : " + exifPackage.getDateTime());					
	} 
}

上記のコードの結果として取得するEXIF情報は次のとおりです。

Make : NIKON CORPORATION
Model : NIKON D3000
Width : 640
Length : 424
DateTime : 2014:08:09 10:35:13

IFD (画像ファイルディレクトリ) およびGPS(全地球測位システム) パッケージ情報の詳細については、EXIFパッケージ のそれぞれのメソッド、つまりgetExifIfdPackage() を呼び出す必要があります。またはgetGpsPackage() 。これらのパッケージから、次のような詳細情報を抽出できます。

  • 画像キャプチャデバイスシリアル番号
  • カメラ所有者名
  • ユーザーコメント
  • 高度
  • 緯度
  • 経度
  • など。

上記のメソッドに追加して、IFDおよびGPS情報とともにEXIFデータを表示できるコードを次に示します。

// EXIF IFD Package
ExifIfdPackage exifIfdPackage = exifPackage.getExifIfdPackage();
System.out.println("BodySerialNumber : " + exifIfdPackage.getBodySerialNumber());
System.out.println("CameraOwnerName : " + exifIfdPackage.getCameraOwnerName());
System.out.println("UserComment : " + exifIfdPackage.getUserComment());
// EXIF GPS Information Package
ExifGpsPackage exifGpsPackage = exifPackage.getGpsPackage();
System.out.println("getAltitude : " + exifGpsPackage.getAltitude());
System.out.println("Latitude Ref : " + exifGpsPackage.getLatitudeRef());
System.out.println("LongitudeRef : " + exifGpsPackage.getLongitudeRef());

Javaを使用して画像のすべてのEXIFタグを読む

画像またはファイルのすべてのEXIFプロパティを表示または抽出する場合は、上記の例と同様の手順で実行できます。

  • Metadataコンストラクターを使用してファイルをロードするだけです。
  • メソッドgetRootPackage() を呼び出して、EXIFルートパッケージを取得します。
  • getExifPackage() メソッドを呼び出して、EXIFパッケージを取得します。
  • EXIFパッケージを繰り返し処理して、目的の名前と値のペアを取得します。
  • 同様に、IFDおよびGPSパッケージを取得し、そのキーと値を表示します。
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
	IExif root = (IExif) metadata.getRootPackage();
	if (root.getExifPackage() != null) {
		String pattern = "%s = %s";
		// Reading all EXIF tags.
		for (TiffTag tag : root.getExifPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
		// Extract all EXIF IFD tags.
		for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
		// Extract all EXIF GPS tags
		for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
	}
}

JavaでEXIFプロパティを更新する

画像やドキュメントの既存のEXIFデータを簡単に変更することもできます。手順は簡単です。

###EXIFパッケージを更新

  • getExifPackage() メソッドを呼び出してEXIFパッケージを取得します。
  • 次のようなセッターメソッドを使用します。
  • 同様に、Artist、Make、Model、Software、Image Width&Height、Date、Timeなどの値を設定できます。

EXIFIFDパッケージを更新

EXIFパッケージを更新するのと同じように、EXIFIFDおよびGPSパッケージのプロパティを更新できます。 ExifIfdPackageまたはExifGpsPackageクラスにアクセスして、貴重な画像やドキュメントに合わせてカスタマイズできる量を確認してください。

// Update/Set new values in EXIF Data (EXIF Package and EXIF IFD Package).
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
    IExif root = (IExif) metadata.getRootPackage();
    // Set the EXIF package if it's missing
    if (root.getExifPackage() == null) {
        root.setExifPackage(new ExifPackage());
    }
    ExifPackage exifPackage = root.getExifPackage();
    // Setting the desired values in EXIF Package and EXIF IFD Package.
    exifPackage.setCopyright("Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.");
    exifPackage.setImageDescription("Eiffel Tower for EXIF");
    exifPackage.setSoftware("GroupDocs.Metadata");
    exifPackage.getExifIfdPackage().setBodySerialNumber("GD-2020");
    exifPackage.getExifIfdPackage().setCameraOwnerName("GroupDocs");
    exifPackage.getExifIfdPackage().setUserComment("Nice image captured in 2014");
    metadata.save("eiffel-tower-updated.jpg");
}

Javaの画像からEXIFメタデータを削除する

これは、ファイルからEXIFパッケージを削除する場合は非常に簡単です。ルートパッケージのsetExifPackage(null) を呼び出して、EXIFパッケージをnullに設定するだけです。

// Removing the EXIF data from an image.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
    IExif root = (IExif) metadata.getRootPackage();
    root.setExifPackage(null);
    metadata.save("eiffel-tower-no-exif.jpg");
}

サポートされている画像とその他の形式

GroupDocs.Metadataで現在サポートされているファイル形式は次のとおりです。更新された情報については、いつでもドキュメントにアクセスしてください。

ドキュメントタイプ ファイル形式
画像 BMP、GIF、JPG、JPEG、JPE、JP2、PNG、DJVU、DWG、DXF、WebP、TIFF、PSD、EMF、WMF
オーディオ&ビデオ MP3、WAV、AVI、MOV / QT、FLV、ASF、DICOM

GroupDocs.Metadataの詳細を見る

もっと話しましょう@無料サポートフォーラム

関連記事