Java获取图像Exif信息

来源:互联网 发布:mac论坛哪个好 编辑:程序博客网 时间:2024/05/17 03:31

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 --> CanonModel --> Canon EOS 700DOrientation --> Top, left side (Horizontal / normal)X Resolution --> 72 dots per inchY Resolution --> 72 dots per inchResolution Unit --> InchSoftware --> Adobe Photoshop CS6 (Windows)Date/Time --> 2015:05:18 16:01:01Artist --> SonglinYCbCr 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

镜头


0 0
原创粉丝点击