---恢复内容开始---
最近在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享。本身工作也是经常和处理大图片打交道,摸索摸索也是多多益善。
首先介绍一下什么是EXIF,EXIF是 Exchangeable Image File 的缩写,这是一种专门为数码相机照片设定的格式。这种格式可以用来记录数字照片的属性信息,如相机的品牌及型号、相片的拍摄时间、拍摄时所设置的光圈大小、快门速度、ISO等信息。除此之外它还能够记录拍摄数据,以及图片格式化方式,这样就可以输出到兼容EXIF格式的外设上,如照片打印机等。
目前最常见的支持EXIF信息的图片格式是JPG,很多的图像工具都可以直接显示图片的EXIF信息,包括现在的一些著名的相册网站也提供页面用于显示照片的EXIF信息。本文介绍Java如何读取图像的EXIF信息,包括如何根据EXIF信息对图像进行调整以便适合用户浏览。
用BufferedImage类来读的时候,过大的图片时常会抛出OutOfMemoryException异常,挺蛋疼的。
- BufferedImage image = ImageIO.read(File file);
目前最简单易用的EXIF信息处理的Java包是 Drew Noakes 写的 metadata-extractor。这是一个能够从图像文件中读取元数据(Exif, IPTC, XMP, ICC等)的简单的Java库,使用简单:
- Metadata metadata = ImageMetadataReader.readMetadata(imagePath);
该库能了解多种格式的元数据,其中许多可以存在于单个图像:
Exif、IPTC、XMP、JFIF / JFXX、ICC Profiles、Photoshop fields、PNG properties、BMP properties、GIF properties
它能处理类型的文件:JPEG、TIFF、PSD、PNG、BMP、GIF、Camera Raw (NEF/CR2/ORF/ARW/RW2/...)
注:并不是每个JPG图像文件都包含有EXIF信息,你可以在Windows资源管理器单击选中图片后,如果该图片包含EXIF信息,则在窗口状态栏会显示出相机的型号。
二、示例代码及描述
下面我们给出一些代码将含有EXIF的图片信息全部打印出来。
示例1):
- import java.io.File;
- import java.util.Iterator;
- import com.drew.imaging.jpeg.JpegMetadataReader;
- import com.drew.metadata.Directory;
- import com.drew.metadata.Metadata;
- import com.drew.metadata.Tag;
- import com.drew.metadata.exif.ExifDirectory;
- /**