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

镜头

Java获取图像Exif信息相关推荐

  1. Java 提取EXIF信息批量重命名

    手机或照机拍摄的照片名称通常是"IMG_001.JPG"这种格式,这种文件名称是无意义的.使用照片拍摄时间命名可以让我们在多年以后查找照片时根据文件名就能快速筛选出某一时间段的照片 ...

  2. 轻松获取图片和视频文件的Exif信息-Java篇

    前言 随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速.便捷.由于无人机本身不进行相关数据的处理,比如全景地图的生成.视频的信息 ...

  3. Java获取照片的Exif信息,并解析GPS

    Java获取照片的Exif信息,并解析GPS 1. 效果图 2. 什么是Exif? 3. 源代码 参考 ❤️ 这篇博客将介绍什么EXIF,以及如何用Java语言读取Exif信息,并转换经纬度为位置信息 ...

  4. java exif_照片EXIF信息的读取和改写的JAVA实现

    由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...

  5. java图像处理,拷贝图像EXIF信息

    在使用java做数字图像处理的时候,有时候需要保留图像的EXIF属性信息,比如相机型号,GPS位置等.处理图像的时候,一般直接通过ImageIO读取图像每个像素上的RGB色彩信息,但是图像的其他属性信 ...

  6. java exif 语言编码_Java读取图片EXIF信息的代码

    Java读取图片EXIF信息的代码 本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image ...

  7. java 修改exif_照片EXIF信息的读取和改写的JAVA实现

    由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...

  8. java 修改照片exif信息

    参考文章: java更改图片拍摄信息及其他Exif详细信息 Java修改图片元数据Exif信息 Commons Imaging开源网站介绍 引入类 <dependency><grou ...

  9. java exif 怎么获取属性_Java如何读取图片EXIF信息

    Java如何读取图片EXIF信息 大家知道Java如何读取图片属性信息吗?下面小编为大家整理了Java读取图片EXIF信息的方法,希望能帮到大家! 首先介绍一下什么是EXIF,EXIF是Exchang ...

  10. java根据exif旋转,关于图片文件旋转JPEG与EXIF信息

    关于图片文件旋转JPEG与EXIF信息 2019/10/31 0:36:39  YuLimin  程序员俱乐部  我要评论(1) 摘要:关于图片文件旋转JPEG与EXIF信息比如某相机拍摄出来的相片, ...

最新文章

  1. postman+newman(2)
  2. Linux下使用终端调试Python程序:pudb
  3. 2018年全球AI突破性技术TOP10
  4. NGUI从入门到实战(大学霸内部资料)
  5. php灰度化,PHP Imagick – 将图像转换为灰度(非常糟糕的结果)
  6. PyTorch可视化理解卷积神经网络
  7. 真香!8 行代码搞定最大子数组和问题
  8. 织梦dede模板|白绿色户外拓展教育培训网站织梦dede模板源码[带手机版数据同步]
  9. 浏览器绑架:曾几何时,喜爱的“百度”成为了“流氓”的代名词?- 移除hao123首页...
  10. 基于tcp的网络程序_【CVPR 2020 Tutorial】基于神经网络的符号化视觉推理和程序合成(2)...
  11. linux运行nodejs一般路径_Linux上安装Nodejs
  12. 利用wordpress搭建自己的网站(百度云虚拟主机)
  13. Java完全自学手册,从外包到大厂,再到万粉博主都靠它
  14. Warning: phpinfo() has been disabled for secur...
  15. 深度学习环境配置:2080Ti+Ubuntu16.04+CUDA10+cuDNN7.3+TensorFlow-gpu1.12
  16. 【jQuery】货币格式化
  17. 移动端-安卓-接口测试简介
  18. Machine Learning之高等数学篇(五)☞《偏导数与方向导数、梯度》
  19. vb中msgbox用法
  20. 5.8 拉普拉斯算子和拉普拉斯矩阵,图拉普拉斯算子推导

热门文章

  1. 建立ad-hoc网络 // 电脑设置wifi热点 (Win10)
  2. 一个EXCEL数组公式的解析
  3. python读取grd数据_从等值线图形获取DAT和GRD格式的数据文件_王宜芳
  4. 30+英文电子书免费下载网站,跟喜欢看英文电子书的朋友分享
  5. 核桃编程Delta Lake实时数仓应用实践
  6. unexpected inconstancy
  7. iOS远程真机之usbmuxd中iproxy的作用
  8. ES3、ES4、ES5、ES6区别
  9. Flutter 使用ListView的separated构造一个带下拉加载的列表
  10. python图片识别文字开源库Easyocr使用