「写真の撮影日を使ってファイル名を管理したい」
そう思った私です。
ごきげんよう。
自分だけで画像を管理するのは特に不便に感じないんだが、
こと複数台のデジカメの画像を管理するとなると話は別だ。
○○社のデジカメはファイル命名規則は~~だ、とか各社のクセが出てしまう。
そこで、ファイル名を付け替えるツールを使っているわけだが、
ど う に も し っ く り こ な い
「この機能はこうなっていたらなぁ」
「ここのインターフェース気持ちわりぃ」
フリーのソフトに文句を言うつもりはないが、どうにも、ね。
「じゃあ自分で作ればいいじゃない」
そう思ったのでした。
撮影日時などの付加情報は、「exif」と呼ばれているらしい。
「exif java」と検索してみたら
java Exif 情報 取得: Conciergeというページに当たりました。
ほう。jarがあるんだね。
drewnoakes.com - jpeg exif / iptc metadata extraction in javaで、このページからmetadata-extractor-2.3.1.jarをダウンロードしてみた。
サンプルソースコードとかも書かれていたので、サンプルも作ってみた。
こんな感じ。
import java.io.File;
import java.util.Date;
import java.util.Iterator;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.MetadataException;
import com.drew.metadata.Tag;
import com.drew.metadata.exif.ExifDirectory;
public class ExifSample {
public static void main(String[] args) {
try {
// 画像ファイル
File file = new File("C:/img1.JPG");
// 色んなデータを出力してみる
viewAllData(file);
// 項目指定したデータを出力してみる
viewSomeData(file);
// 撮影日時をDate型で出力してみる
viewDateData(file);
}
catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public static void viewAllData(File file) throws JpegProcessingException {
Metadata metadata = JpegMetadataReader.readMetadata(file);
Iterator<Directory> directories = metadata.getDirectoryIterator();
while (directories.hasNext()) {
Directory directory = directories.next();
Iterator<Tag> tags = directory.getTagIterator();
while (tags.hasNext()) {
Tag tag = tags.next();
System.out.println(tag);
}
}
}
public static void viewSomeData(File file) throws JpegProcessingException {
Directory directory = JpegMetadataReader.readMetadata(file).getDirectory(ExifDirectory.class);
// 装置の製造元
System.out.println(directory.getString(ExifDirectory.TAG_MAKE));
// カメラのモデル
System.out.println(directory.getString(ExifDirectory.TAG_MODEL));
// 写真の撮影日
System.out.println(directory.getString(ExifDirectory.TAG_DATETIME));
}
public static void viewDateData(File file) throws JpegProcessingException, MetadataException {
Metadata metadata = JpegMetadataReader.readMetadata(file);
Directory directory = metadata.getDirectory(ExifDirectory.class);
Date date = directory.getDate(ExifDirectory.TAG_DATETIME);
System.out.println(date.toString());
}
}
うん。
viewDateDataメソッドを応用すれば撮影日時がとれるね。
色々できそうだ。