JavaでJPEGのEXIF情報を読み取り

JPEG写真のEXIF情報をまとめて持ってくるため、

Javaで取得をしてみました。

EXIF情報取得には、METADATA EXTRACTORという

便利なライブラリがあるのでこれを使わせてもらいます。

EXIF情報は、情報によって格納されているディレクトリが異なるらしいので、

まずJPEGメタデータを読み込んだあと、必要なディレクトリを読み込んで、情報を取り出します。

EXIF情報には何があるか、情報のタグ名、タグIDがどのようになっているかは、このサンプルが参考になります。

METADATA EXTRACTORを使ってJavaEXIF情報読み込む例はこことかここにあるのですが、

情報が古く、最新のライブラリの仕様は変わっていてコードがそのままでは使えないため、

ライブラリの仕様に合わせてプログラムを変更します。

またいつ仕様も変更になるかわからないので、githubGettingStartedを参考にするとよいでしょう。

試しに、以下のデータを読みだした例を置いておきます。

・カメラメーカー

・カメラモデル

・絞り値

・露出時間

ISO感度

・露出

焦点距離

・撮影日時

------------------------------------------

import java.io.File;

import java.util.Date;

import com.drew.imaging.ImageMetadataReader;

import com.drew.metadata.Metadata;

import com.drew.metadata.exif.ExifIFD0Directory;

import com.drew.metadata.exif.ExifSubIFDDirectory;

public class Main {

public static void main(String[] args) {

// メタデータを読み込み

File jpegFile = new File(fileName);

Metadata metadata = ImageMetadataReader.readMetadata(jpegFile);

// EXIFディレクトリ(情報種類)を読み込み

ExifIFD0Directory ifdDirectory = metadata.getDirectory(ExifIFD0Directory.class);

ExifSubIFDDirectory subIfdDirectory = metadata.getDirectory(ExifSubIFDDirectory.class);

// タグの値を読み込み

String maker = ifdDirectory.getString(ExifIFD0Directory.TAG_MAKE);

String cameraModel = ifdDirectory.getString(ExifIFD0Directory.TAG_MODEL);

String fNumber = subIfdDirectory.getString(ExifSubIFDDirectory.TAG_FNUMBER);

String exposureTime = subIfdDirectory.getString(ExifSubIFDDirectory.TAG_EXPOSURE_TIME);

String ISO = subIfdDirectory.getString(ExifSubIFDDirectory.TAG_ISO_EQUIVALENT);

String exposureBias = subIfdDirectory.getString(ExifSubIFDDirectory.TAG_EXPOSURE_BIAS);

String foculLength = subIfdDirectory.getString(ExifSubIFDDirectory.TAG_FOCAL_LENGTH);

Date date = subIfdDirectory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);

System.out.println(maker);

}

}