经常看到我们用相机拍的相片在用图片浏览器查看,或者鼠标放在上面时,会显示出相片的信息,比如拍摄时间、拍摄相机型号,更有的光圈,曝光等都有,现在如果想通过程序读取这些信息要怎么实现呢?
首先介绍一下EXIF这么个东西,EXIF是Exchangeable Image File的缩写,这是一种专门为数码相机照片设定的格式。这种格式可以用来记录数字照片的属性信息,例如相机的品牌及型号、相片的拍摄时间、拍摄时所设置 的光圈大小、快门速度、ISO等等信息。除此之外它还能够记录拍摄数据,以及照片格式化方式,这样就可以输出到兼容EXIF格式的外设上,例如照片打印机 等。
目前最常见的支持EXIF信息的图片格式是JPG,很多的图像工具都可以直接显示图片的EXIF信息,包括现在的一些著名的相册网站也提供页面用于 显示照片的EXIF信息。目前最简单易用的EXIF信息处理的Java包是Drew Noakes写的metadata-extractor,该项目最新的版本是2.6.4。你可以直接从http://drewnoakes.com/code/exif/下载该项目的最新版本包括其源码。
需要注意的是,并不是每个JPG图像文件都包含有EXIF信息,你可以在Windows资源管理器单击选中图片后,如果该图片包含EXIF信息,则会在属性->摘要中显示出来。
看一个代码片段
try {
File imageFile = new File("image");
Metadata metadata = ImageMetadataReader.readMetadata(imageFile);
ExifSubIFDDirectory directory = metadata.getDirectory(ExifSubIFDDirectory.class);
if (directory != null) {
Date originalDate = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);
return originalDate;
}
} catch (ImageProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
这个片段演示了一个简单的获取相片的拍摄时间,还有其他很多的属性,可以参考文档进行编写。
http://code.google.com/p/metadata-extractor/w/list