您的位置:首页 > 编程语言 > Java开发

Java获取图像Exif信息

2015-06-07 22:44 603 查看
Exif(Exchangeable Image File)是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。在Windows
系统中,对图像文件右键选择“属性”,在“详细信息”选项卡中可以查看Exif值,但这些值并不全面,想要查看完整的Exif信息,需要下载专业的Exif信息查看器。

用Java实现一个Exif查看器,需要借助开源项目metadata-extractor,你可以在https://drewnoakes.com/code/exif/中查看该项目的详细信息。

导入jar包

项目需要两个jar包:

metadata-extractor-2.8.1.jar,

xmpcore-5.1.2.jar

你可以在https://github.com/drewnoakes/metadata-extractor/releases下载这两个jar包。

通常情况下,使用Metadata metadata = ImageMetadataReader.readMetadata(file);

就可以满足大多数需求。该方法知用于不确定图像格式的情况,该方法会自动确定图像的格式,返回一个Metadata对象。支持JPEG, TIFF, GIF, BMP 和RAW等大多数格式。
如果知道确切的图像格式,如JPEG、BMP等,就可以使用JpegMetadataReader或BmpMetadataReader来获得Metadata对象,如:

Metadata metadata = JpegMetadataReader.readMetadata(file);

当然,如果你只希望读取无数据类型的一个子集,你可以指定一个Reader,如:只处理JPEG类型:
Iterable<JpegSegmentMetadataReader> readers = Arrays.asList(new ExifReader(), new IptcReader());

Metadata metadata = JpegMetadataReader.readMetadata(file, readers);

下面我们使用第一种方式给出一个完整的例子:
import com.drew.imaging.ImageMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;

import java.io.File;

public class SampleUsage
{
public static void main(String[] args)
{
File file = new File("N:/ls.jpg");
try
{
Metadata metadata = ImageMetadataReader.readMetadata(file);

print(metadata);
}
catch (Exception e)
{
e.printStackTrace();
}

}
private static void print(Metadata metadata)
{
for (Directory directory : metadata.getDirectories())
{
for (Tag tag : directory.getTags())
{
System.out.print(tag.getTagName() + " --> ");
System.out.println(tag.getDescription());
}

if (directory.hasErrors())
{
for (String error : directory.getErrors())
{
System.err.println("ERROR: " + error);
}
}
}
}
}

输出结果如下(部分):
Make --> Canon
Model --> Canon EOS 700D
Orientation --> Top, left side (Horizontal / normal)
X Resolution --> 72 dots per inch
Y Resolution --> 72 dots per inch
Resolution Unit --> Inch
Software --> Adobe Photoshop CS6 (Windows)
Date/Time --> 2015:05:18 16:01:01
Artist --> Songlin
YCbCr Positioning --> Datum point

前面是参数的名称,后面是参数的值,如Make参数(厂商),对应的值是Canon(佳能)。常见的Exif参数如下表:

代码
英文解释
中文解释
0x0000
GPS Version ID
GPS版本
0x010f
Make
厂商
0x0110
Model
机型
0x0112
Orientation
方向
0x0131
Software
软件
0x0132
Date/Time
修改时间
0x013b
Artist
作者
0x0213
YCbCr Positioning
YcbCr定位
0x829a
Exposure Time
曝光时间
0x829d
F-Number
光圈
0x8822
Exposure Program
曝光程序
0x8827
ISO Speed Ratings
ISO感光度
0x9000
Exif Version
Exif版本
0x9003
Date/Time Original
拍摄时间
0x9004
Date/Time Digitized
数字化时间
0x9101
Components Configuration
成分构成
0x9201
Shutter Speed Value
快门速度
0x9202
Aperture Value
光圈值
0x9204
Exposure Bias Value
曝光补偿
0x9205
Max Aperture Value
最大光圈
0x9207
Metering Mode
测光模式
0x9209
Flash
闪光
0x920a
Focal Length
焦距
0x9286
User Comment
用户注释
0x9290
Sub-Sec Time
次秒(修改时间)
0x9291
Sub-Sec Time Original
次秒(拍摄时间)
0x9292
Sub-Sec Time Digitized
次秒(数字化时间)
0xa000
FlashPix Version
FlashPix版本
0xa001
Color Space
色彩空间
0xa002
Exif Image Width
Exif图像宽度
0xa003
Exif Image Height
Exif图像高度
0xa20e
Focal Plane X Resolution
焦平面水平分辨率
0xa20f
Focal Plane Y Resolution
焦平面垂直分辨率
0xa210
Focal Plane Resolution Unit
焦平分辨率单位
0xa401
Custom Rendered
自定义补偿
0xa402
Exposure Mode
曝光模式
0xa403
White Balance Mode
白平衡
0xa406
Scene Capture Type
场景拍摄类型
0x0001
Interoperability Index
可交换标准
0x0002
Interoperability Version
可交换版本
0x0103
Thumbnail Compression
压缩模式
0x0201
Thumbnail Offset
JPEG缩略图起始位置
0x0202
Thumbnail Length
JPEG缩略图数据长度
0x011a
X Resolution
水平分辨率
0x011b
Y Resolution
垂直分辨率
0x0128
Resolution Unit
分辨率单位
0x0131
Software
软件
0x0006
Lens Information
镜头信息
0x0007
Lens
镜头
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息